У меня есть словарь списков.Я хочу сгенерировать все комбинации этих списков и вернуть эти комбинации в виде списка словарей с правильными сопоставлениями пар ключей и значений.
До сих пор я достиг этого, развернув приведенный ниже код, но хочу бытьболее подробно о сопоставлениях пары ключ-значение на протяжении всего процесса, а не о перечисленном ниже подходе.Я обеспокоен, учитывая, что словарь не упорядочен, чтобы подход перечисления мог быть открыт для неправильного отображения пар ключ-значение.В любом случае, я ищу самый питонический способ достижения результата.
import itertools
dct_lst = {'Apple':[3,5,7],'Pear':[5,2],'Orange':[10],'Banana':[7,10],'Lemon':[5,7,9,2,1]}
combs = itertools.product(*(dct_lst[key] for key in dct_lst.keys()))
lst_dct = []
for comb in combs:
dct = {}
for j,key in enumerate(dct_lst.keys()):
dct[key] = comb[j]
lst_dct.append(dct)
lst_dct
[{'Apple': 3, 'Banana': 7, 'Lemon': 5, 'Orange': 10, 'Pear': 5},
{'Apple': 3, 'Banana': 7, 'Lemon': 7, 'Orange': 10, 'Pear': 5},
{'Apple': 3, 'Banana': 7, 'Lemon': 9, 'Orange': 10, 'Pear': 5},
{'Apple': 3, 'Banana': 7, 'Lemon': 2, 'Orange': 10, 'Pear': 5},
{'Apple': 3, 'Banana': 7, 'Lemon': 1, 'Orange': 10, 'Pear': 5},
{'Apple': 3, 'Banana': 10, 'Lemon': 5, 'Orange': 10, 'Pear': 5},
{'Apple': 3, 'Banana': 10, 'Lemon': 7, 'Orange': 10, 'Pear': 5},
{'Apple': 3, 'Banana': 10, 'Lemon': 9, 'Orange': 10, 'Pear': 5},
{'Apple': 3, 'Banana': 10, 'Lemon': 2, 'Orange': 10, 'Pear': 5},
{'Apple': 3, 'Banana': 10, 'Lemon': 1, 'Orange': 10, 'Pear': 5},
{'Apple': 3, 'Banana': 7, 'Lemon': 5, 'Orange': 10, 'Pear': 2},
{'Apple': 3, 'Banana': 7, 'Lemon': 7, 'Orange': 10, 'Pear': 2},
{'Apple': 3, 'Banana': 7, 'Lemon': 9, 'Orange': 10, 'Pear': 2},
{'Apple': 3, 'Banana': 7, 'Lemon': 2, 'Orange': 10, 'Pear': 2},
{'Apple': 3, 'Banana': 7, 'Lemon': 1, 'Orange': 10, 'Pear': 2},
{'Apple': 3, 'Banana': 10, 'Lemon': 5, 'Orange': 10, 'Pear': 2},
{'Apple': 3, 'Banana': 10, 'Lemon': 7, 'Orange': 10, 'Pear': 2},
{'Apple': 3, 'Banana': 10, 'Lemon': 9, 'Orange': 10, 'Pear': 2},
{'Apple': 3, 'Banana': 10, 'Lemon': 2, 'Orange': 10, 'Pear': 2},
{'Apple': 3, 'Banana': 10, 'Lemon': 1, 'Orange': 10, 'Pear': 2},
{'Apple': 5, 'Banana': 7, 'Lemon': 5, 'Orange': 10, 'Pear': 5},
{'Apple': 5, 'Banana': 7, 'Lemon': 7, 'Orange': 10, 'Pear': 5},
{'Apple': 5, 'Banana': 7, 'Lemon': 9, 'Orange': 10, 'Pear': 5},
{'Apple': 5, 'Banana': 7, 'Lemon': 2, 'Orange': 10, 'Pear': 5},
{'Apple': 5, 'Banana': 7, 'Lemon': 1, 'Orange': 10, 'Pear': 5},
{'Apple': 5, 'Banana': 10, 'Lemon': 5, 'Orange': 10, 'Pear': 5},
{'Apple': 5, 'Banana': 10, 'Lemon': 7, 'Orange': 10, 'Pear': 5},
{'Apple': 5, 'Banana': 10, 'Lemon': 9, 'Orange': 10, 'Pear': 5},
{'Apple': 5, 'Banana': 10, 'Lemon': 2, 'Orange': 10, 'Pear': 5},
{'Apple': 5, 'Banana': 10, 'Lemon': 1, 'Orange': 10, 'Pear': 5},
{'Apple': 5, 'Banana': 7, 'Lemon': 5, 'Orange': 10, 'Pear': 2},
{'Apple': 5, 'Banana': 7, 'Lemon': 7, 'Orange': 10, 'Pear': 2},
{'Apple': 5, 'Banana': 7, 'Lemon': 9, 'Orange': 10, 'Pear': 2},
{'Apple': 5, 'Banana': 7, 'Lemon': 2, 'Orange': 10, 'Pear': 2},
{'Apple': 5, 'Banana': 7, 'Lemon': 1, 'Orange': 10, 'Pear': 2},
{'Apple': 5, 'Banana': 10, 'Lemon': 5, 'Orange': 10, 'Pear': 2},
{'Apple': 5, 'Banana': 10, 'Lemon': 7, 'Orange': 10, 'Pear': 2},
{'Apple': 5, 'Banana': 10, 'Lemon': 9, 'Orange': 10, 'Pear': 2},
{'Apple': 5, 'Banana': 10, 'Lemon': 2, 'Orange': 10, 'Pear': 2},
{'Apple': 5, 'Banana': 10, 'Lemon': 1, 'Orange': 10, 'Pear': 2},
{'Apple': 7, 'Banana': 7, 'Lemon': 5, 'Orange': 10, 'Pear': 5},
{'Apple': 7, 'Banana': 7, 'Lemon': 7, 'Orange': 10, 'Pear': 5},
{'Apple': 7, 'Banana': 7, 'Lemon': 9, 'Orange': 10, 'Pear': 5},
{'Apple': 7, 'Banana': 7, 'Lemon': 2, 'Orange': 10, 'Pear': 5},
{'Apple': 7, 'Banana': 7, 'Lemon': 1, 'Orange': 10, 'Pear': 5},
{'Apple': 7, 'Banana': 10, 'Lemon': 5, 'Orange': 10, 'Pear': 5},
{'Apple': 7, 'Banana': 10, 'Lemon': 7, 'Orange': 10, 'Pear': 5},
{'Apple': 7, 'Banana': 10, 'Lemon': 9, 'Orange': 10, 'Pear': 5},
{'Apple': 7, 'Banana': 10, 'Lemon': 2, 'Orange': 10, 'Pear': 5},
{'Apple': 7, 'Banana': 10, 'Lemon': 1, 'Orange': 10, 'Pear': 5},
{'Apple': 7, 'Banana': 7, 'Lemon': 5, 'Orange': 10, 'Pear': 2},
{'Apple': 7, 'Banana': 7, 'Lemon': 7, 'Orange': 10, 'Pear': 2},
{'Apple': 7, 'Banana': 7, 'Lemon': 9, 'Orange': 10, 'Pear': 2},
{'Apple': 7, 'Banana': 7, 'Lemon': 2, 'Orange': 10, 'Pear': 2},
{'Apple': 7, 'Banana': 7, 'Lemon': 1, 'Orange': 10, 'Pear': 2},
{'Apple': 7, 'Banana': 10, 'Lemon': 5, 'Orange': 10, 'Pear': 2},
{'Apple': 7, 'Banana': 10, 'Lemon': 7, 'Orange': 10, 'Pear': 2},
{'Apple': 7, 'Banana': 10, 'Lemon': 9, 'Orange': 10, 'Pear': 2},
{'Apple': 7, 'Banana': 10, 'Lemon': 2, 'Orange': 10, 'Pear': 2},
{'Apple': 7, 'Banana': 10, 'Lemon': 1, 'Orange': 10, 'Pear': 2}]
Результат, как и ожидалось.Тем не менее, меня интересует самый надежный питонский способ достижения этого результата.