簡體   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