[英]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.