У меня есть следующие списки. На самом деле эти списки намного больше, но я упростил для примера.
d = ["a", "b", "c", "d"]
p = [1,2,3,4]
a = [1,2,3,4]
Мне нужно сопоставить буквы в d со всеми возможными вариантами p*a в следующем формате:
{0: {'a': {p:1, a:1}
'b': {p:1, a:1}
'c': {p:1, a:1}
'd': {p:1, a:1}
}}
Это также может быть список вместо словаря, где индекс — это возможность, а где n списка — все возможные комбинации букв и словарей p и a.
Код, который я написал, выглядит так
p = [1,2,3,4]
a = [1,2,3,4]
d = ["a", "b", "c", "d"]
o = list()
end_dict = list()
for y in p:
for z in a:
o.append({"p":y, "a":z})
counter = 0
for x in d:
for y in o:
print(counter)
end_dict.append({x:y})
counter+=1
print(end_dict)
Однако это не создает список, в котором все буквы в словаре вместе. Я понятия не имею, как сделать это эффективно.
Я считаю, что это код, который должен работать:
p = [1,2,3,4]
a = [1,2,3,4]
d = ["a", "b", "c", "d"]
o = list()
end_dict = list()
for price in p:
for amount in a:
o.append({"p": price, "a": amount})
for w in o:
for x in o:
for y in o:
for z in o:
test = {
d[0]:w,
d[1]:x,
d[2]:y,
d[3]:z
}
end_dict.append(test)
print(end_dict)
Класс product
из itertools
можно использовать для создания декартова произведения p
, a
и d
, например. for x in product(p, a, d): print x
Я не вижу никаких "разных" комбинаций. Они все выглядят как {p: 1, a: 1}
. Может быть, это я, но я не понимаю, чего вы хотите добиться. Более того, если "a", "b", "c", "d"
должно представлять 4 различных способа составления пар из списков a
и p
, что делать с тем фактом, что возможно еще 12 пар (всего 16)?
Извините, я неправильно понял. следующим может быть {1: {'a': {p:2, a:1} 'b': {p:1, a:1} 'c': {p:1, a:1} 'd ': {p:1, a:1} }} И следующий {1: {'a': {p:1, a:2} 'b': {p:1, a:1} 'c': {p:1, a:1} 'd': {p:1, a:1} }} и так далее
Вы можете сделать это в понимании списка, которое создает словарную запись со всеми ключами для каждой комбинации значений p и a:
d = ["a", "b", "c", "d"]
p = [1,2,3,4]
a = [1,2,3,4]
r = [ {dk:{"p":pv,"a":av} for dk in d} for pv in p for av in a ]
print(*r,sep = "\n")
{'a': {'p': 1, 'a': 1}, 'b': {'p': 1, 'a': 1}, 'c': {'p': 1, 'a': 1}, 'd': {'p': 1, 'a': 1}}
{'a': {'p': 1, 'a': 2}, 'b': {'p': 1, 'a': 2}, 'c': {'p': 1, 'a': 2}, 'd': {'p': 1, 'a': 2}}
{'a': {'p': 1, 'a': 3}, 'b': {'p': 1, 'a': 3}, 'c': {'p': 1, 'a': 3}, 'd': {'p': 1, 'a': 3}}
{'a': {'p': 1, 'a': 4}, 'b': {'p': 1, 'a': 4}, 'c': {'p': 1, 'a': 4}, 'd': {'p': 1, 'a': 4}}
{'a': {'p': 2, 'a': 1}, 'b': {'p': 2, 'a': 1}, 'c': {'p': 2, 'a': 1}, 'd': {'p': 2, 'a': 1}}
{'a': {'p': 2, 'a': 2}, 'b': {'p': 2, 'a': 2}, 'c': {'p': 2, 'a': 2}, 'd': {'p': 2, 'a': 2}}
{'a': {'p': 2, 'a': 3}, 'b': {'p': 2, 'a': 3}, 'c': {'p': 2, 'a': 3}, 'd': {'p': 2, 'a': 3}}
{'a': {'p': 2, 'a': 4}, 'b': {'p': 2, 'a': 4}, 'c': {'p': 2, 'a': 4}, 'd': {'p': 2, 'a': 4}}
{'a': {'p': 3, 'a': 1}, 'b': {'p': 3, 'a': 1}, 'c': {'p': 3, 'a': 1}, 'd': {'p': 3, 'a': 1}}
{'a': {'p': 3, 'a': 2}, 'b': {'p': 3, 'a': 2}, 'c': {'p': 3, 'a': 2}, 'd': {'p': 3, 'a': 2}}
{'a': {'p': 3, 'a': 3}, 'b': {'p': 3, 'a': 3}, 'c': {'p': 3, 'a': 3}, 'd': {'p': 3, 'a': 3}}
{'a': {'p': 3, 'a': 4}, 'b': {'p': 3, 'a': 4}, 'c': {'p': 3, 'a': 4}, 'd': {'p': 3, 'a': 4}}
{'a': {'p': 4, 'a': 1}, 'b': {'p': 4, 'a': 1}, 'c': {'p': 4, 'a': 1}, 'd': {'p': 4, 'a': 1}}
{'a': {'p': 4, 'a': 2}, 'b': {'p': 4, 'a': 2}, 'c': {'p': 4, 'a': 2}, 'd': {'p': 4, 'a': 2}}
{'a': {'p': 4, 'a': 3}, 'b': {'p': 4, 'a': 3}, 'c': {'p': 4, 'a': 3}, 'd': {'p': 4, 'a': 3}}
{'a': {'p': 4, 'a': 4}, 'b': {'p': 4, 'a': 4}, 'c': {'p': 4, 'a': 4}, 'd': {'p': 4, 'a': 4}}
Спасатель! Спасибо это красиво
Я не понимаю ожидаемого результата для «всех разных возможностей p*a». Почему
{p: 1, a: 1}
для всех четырех букв?