來自問題編號 5558418,假設我有一個字典,其中的值是串列:
DL = {'a': [0, 1], 'b': [2, 3]}
我想將其轉換為字典串列,但具有所有可能的排列。也就是說,而不是
LD = [{'a': 0, 'b': 2}, {'a': 1, 'b': 3}]
我現在想要:
LD = [{'a': 0, 'b': 2}, {'a': 0, 'b': 3}, {'a': 1, 'b': 2}, {'a': 1, 'b': 3}]
我怎樣才能做到這一點?我認為 itertools 的 product() 可能很方便,但我不太明白。
獎勵:在我的實際問題中,有些值不是串列。我如何做與上面相同的事情,但保留所有不是串列的值?例如:
D = {'a': [0, 1], 'b': [2, 3], 'c':7, 'd':9}
變成:
L = [{'a': 0, 'b': 2, 'c':7, 'd':9}, {'a': 0, 'b': 3, 'c':7, 'd':9}}, {'a': 1, 'b': 2, 'c':7, 'd':9}}, {'a': 1, 'b': 3, 'c':7, 'd':9}}]
謝謝!
uj5u.com熱心網友回復:
確保每個值都是一個串列,然后使用itertools.product:
from itertools import product
# DL = {'a': [0, 1], 'b': [2, 3]}
D = {'a': [0, 1], 'b': [2, 3], 'c': 7, 'd': 9}
res = [dict(zip(D, p)) for p in product(*[v if isinstance(v, list) else [v] for v in D.values()])]
print(res)
輸出
[{'a': 0, 'b': 2, 'c': 7, 'd': 9}, {'a': 0, 'b': 3, 'c': 7, 'd': 9}, {'a': 1, 'b': 2, 'c': 7, 'd': 9}, {'a': 1, 'b': 3, 'c': 7, 'd': 9}]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/312944.html
上一篇:在給定if陳述句的情況下,如何使用回圈陳述句更改字典中的特定值?
下一篇:C#字典與二維陣列
