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