gpt4 book ai didi

python - 将列表字典转换为字典中列表中元素的所有组合的字典列表的大多数 pythonic 方法?

转载 作者:太空宇宙 更新时间:2023-11-04 09:27:37 25 4
gpt4 key购买 nike

我有一本列表字典。我想生成这些列表的所有组合,并将这些组合作为具有正确键值对映射的字典列表返回。

到目前为止,我已经通过部署以下代码实现了这一点,但我想在整个过程中明确键值对映射,而不是依赖下面的枚举方法。考虑到字典未排序,我担心枚举方法可能无法以某种方式正确映射键值对。无论如何,我正在寻找实现结果的最 pythonic 方式。

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}]

结果符合预期。不过,我对实现此结果的最强大的 pythonic 方法很感兴趣。

最佳答案

您可以重复键和值来构建项目列表:

>>> import itertools
>>> dct_lst = {'Apple':[3,5,7],'Pear':[5,2],'Orange':[10],'Banana':[7,10],'Lemon':[5,7,9,2,1]}
>>> L = [[(k, v) for v in vs] for k, vs in dct_lst.items()]
>>> L
[[('Apple', 3), ('Apple', 5), ('Apple', 7)], [('Pear', 5), ('Pear', 2)], [('Orange', 10)], [('Banana', 7), ('Banana', 10)], [('Lemon', 5), ('Lemon', 7), ('Lemon', 9), ('Lemon', 2), ('Lemon', 1)]]

并使用 itertools.product 创建所有组合:

>>> list (itertools.product(*L))
[(('Apple', 3), ('Pear', 5), ('Orange', 10), ('Banana', 7), ('Lemon', 5)), (('Apple', 3), ('Pear', 5), ('Orange', 10), ('Banana', 7), ('Lemon', 7)), (('Apple', 3), ('Pear', 5), ('Orange', 10), ('Banana', 7), ('Lemon', 9)), ..., (('Apple', 7), ('Pear', 2), ('Orange', 10), ('Banana', 7), ('Lemon', 2)), (('Apple', 7), ('Pear', 2), ('Orange', 10), ('Banana', 7), ('Lemon', 1)), (('Apple', 7), ('Pear', 2), ('Orange', 10), ('Banana', 10), ('Lemon', 5)), (('Apple', 7), ('Pear', 2), ('Orange', 10), ('Banana', 10), ('Lemon', 7)), (('Apple', 7), ('Pear', 2), ('Orange', 10), ('Banana', 10), ('Lemon', 9)), (('Apple', 7), ('Pear', 2), ('Orange', 10), ('Banana', 10), ('Lemon', 2)), (('Apple', 7), ('Pear', 2), ('Orange', 10), ('Banana', 10), ('Lemon', 1))]

输出由元组组成,但创建字典很容易:

>>> list(map(dict, itertools.product(*L)))
[{'Apple': 3, 'Pear': 5, 'Orange': 10, 'Banana': 7, 'Lemon': 5}, {'Apple': 3, 'Pear': 5, 'Orange': 10, 'Banana': 7, 'Lemon': 7}, ..., {'Apple': 7, 'Pear': 2, 'Orange': 10, 'Banana': 10, 'Lemon': 1}]

关于python - 将列表字典转换为字典中列表中元素的所有组合的字典列表的大多数 pythonic 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56958100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com