簡體   English   中英

Python 以列表為值的字典,使用原始鍵值的所有可能組合創建字典列表

[英]Python dict with lists as values, create list of dicts with all possible combinations of original keys-values

我有一個字典,其中所有值都是列表:

original_dict = {"key_00": [0, 1],
                    "key_01": [2, 3]
                    }

我想獲得一個字典列表,其中每個鍵與原始對應值之一相關聯,形成所有可能的組合......換句話說,像這樣:

[
{"key_00": 0, "key_01": 2},
{"key_00": 0, "key_01": 3},
{"key_00": 1, "key_01": 2},
{"key_00": 1, "key_01": 3}
]

我嘗試使用這樣的東西:

res = []
for combs in product(*original_dict.values()):
    # zip used to perform cross keys combinations.
    res.append([{ele: cnt} for ele, cnt in zip(original_dict, combs)])

但這樣我最終有

[{'key_00': 0}, {'key_01': 2}]
[{'key_00': 0}, {'key_01': 3}]
[{'key_00': 1}, {'key_01': 2}]
[{'key_00': 1}, {'key_01': 3}]    

您可以使用list comprehesntion

from itertools import product

original_dict = {"key_00": [0, 1],"key_01": [2, 3]}

res = [{ele: cnt for ele, cnt in zip(original_dict, combs)} 
       for combs in product(*original_dict.values())]

print(res)

您的代碼可以修復如下:

res = []
for combs in product(*original_dict.values()):
    res.append({ele: cnt for ele, cnt in zip(original_dict, combs)})

[
    {'key_00': 0, 'key_01': 2}, 
    {'key_00': 0, 'key_01': 3}, 
    {'key_00': 1, 'key_01': 2}, 
    {'key_00': 1, 'key_01': 3}
]

您必須使用 itertools.product():

import itertools
original_dict = {"key_00": [0, 1],
                 "key_01": [2, 3]}

keys, values = zip(*original_dict.items())
aim = [dict(zip(keys, v)) for v in itertools.product(*values)]
print(aim)

>>> [{'key_00': 0, 'key_01': 2},
     {'key_00': 0, 'key_01': 3},
     {'key_00': 1, 'key_01': 2},
     {'key_00': 1, 'key_01': 3}]

嘗試這個

    res.append([{ele: cnt for ele, cnt in zip(original_dict, combs)}])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM