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