繁体   English   中英

如何从python中的字典中进行所有组合

[英]How to make all combinations from a dictionary in python

我有以下字典:

origin = {0: [1,2], 1: [1,2,3]}

我想得到一个字典,使组合 key_element 的价值。 期望的输出是:

{'combo_0_1': 0, 'combo_0_2': 0, 'combo_1_1': 0, 'combo_1_2': 0, 'combo_1_3': 0}

我试过这个:

output = {f"combo_{x}_{y}" : 0 for x in origin.keys() for y in origin.values()}

但它返回{'combo_0_[1, 2]': 0, 'combo_0_[1, 2, 3]': 0, 'combo_1_[1, 2]': 0, 'combo_1_[1, 2, 3]': 0}这不是我想要的。 请问我该怎么做?

origin.values()返回所有值,它们是列表。 这不是你想要的。

您想要当前列表的元素。

output = {f"combo_{x}_{y}" : 0 for x in origin.keys() for y in origin[x]}

它有助于首先将其写成一个完整的循环。 之后我们可以将其转换为 dict 理解。

您希望键的第二部分是origin每个值的每个元素 您可以在一个外部循环中获取origin的键和值,然后在内部循环中,您可以遍历该值中的元素。

origin = {0: [1,2], 1: [1,2,3]}
output = {}
for key, val in origin.items():
    for elem in val:
        output[f"combo_{key}_{elem}"] = 0

或者,作为听写理解:

output = {f"combo_{key}_{elem}": 0 for key, val in origin.items() for elem in val}

这给出了:

{'combo_0_1': 0,
 'combo_0_2': 0,
 'combo_1_1': 0,
 'combo_1_2': 0,
 'combo_1_3': 0}

一种在dict.items上使用字典理解的方法:

origin = {0: [1, 2], 1: [1, 2, 3]}

res = {f"combo_{k}_{v}": 0 for k, vs in origin.items() for v in vs}
print(res)

输出

{'combo_0_1': 0, 'combo_0_2': 0, 'combo_1_1': 0, 'combo_1_2': 0, 'combo_1_3': 0}

这是我的解决方案。 它生成列表的所有排列,并泛化为接受更长的字典。

import itertools

origin = {0: [1,2], 1: [1,2,3]}
perms = list(itertools.product(*origin.values()))
output = {f"combo_"+ "_".join(map(str,p)): 0 for p in perms}
print(output)

注意:您需要将itertools.product生成的元组映射到字符串,以将它们连接到您的"combo_"键。 希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM