Как сложить словари в цикле

Есть код, который перебирает один список для другого, преобразуя все это в словари.

all_colors = ["black", "silver", "gray", "white", "maroon", "red", "purple"]
all_models = ["Audi RS2", "Vauxhall Ampera", "Dacia Duster", "Lamborghini Gallardo"]

h = {}
for i in all_models:
    for k in all_colors:
        d = {i: k}
        h.update(d)
print(h)

Дело в том, что на выходе я получаю

>>> {'Audi RS2': 'purple', 'Vauxhall Ampera': 'purple', 'Dacia Duster': 'purple', 'Lamborghini Gallardo': 'purple'}

Хотя, по идее, должно быть так

>>> {'Audi RS2': 'black', 'Audi RS2': 'silver', ... 'Vauxhall Ampera': 'black', 'Vauxhall Ampera': 'silver' и т.д.}

Когда прописываю print(d) внутри цикла, то все хорошо, словари формируются как надо, осталось только соединить, но update соединяет почему-то только последний цвет в списке для каждой машины другого списка. Прошу помощи с этим у вас, как исправить?


Ответы (1 шт):

Автор решения: Denis Shelemekh

Используйте zip для одновременного перебора двух (и более коллекций):

>>> for item in zip([1, 2, 3], ['sugar', 'spice', 'everything nice']):
...     print(item)
...
(1, 'sugar')
(2, 'spice')
(3, 'everything nice')
→ Ссылка