给定初始字典
c = {'c': {'a':[1, 2, 3], 'b': [2, 3, 4]}}
我想生成一个具有所有可能排列的字典,而不显式调用索引
预期输出:
c = {'c0': {'a': 1, 'b': 2},
'c1': {'a': 1, 'b': 3},
'c2': {'a': 1, 'b': 4},
'c3': {'a': 2, 'b': 2},
'c4': {'a': 2, 'b': 3},
'c5': {'a': 2, 'b': 4},
'c6': {'a': 3, 'b': 2},
'c7': {'a': 3, 'b': 3},
'c8': {'a': 3, 'b': 4}}
我尝试过的(虽然不太漂亮,但我现在无法直接思考):
p = {}
for i, j in c.items():
for k in j.keys():
xxx = 0
for v in j[k]:
if i + str(xxx) in p.keys():
p[i + str(xxx)][k] = v
else:
p[i + str(xxx)] = {}
p[i + str(xxx)][k] = v
xxx +=1
最佳答案
您可以使用itertools.product
:
from itertools import product as pt
c = {'c': {'a':[1, 2, 3], 'b': [2, 3, 4]}}
new_c = {f'{a}{i}':dict(zip(b.keys(), k)) for a, b in c.items() for i, k in enumerate(pt(*b.values()))}
输出:
{'c0': {'a': 1, 'b': 2},
'c1': {'a': 1, 'b': 3},
'c2': {'a': 1, 'b': 4},
'c3': {'a': 2, 'b': 2},
'c4': {'a': 2, 'b': 3},
'c5': {'a': 2, 'b': 4},
'c6': {'a': 3, 'b': 2},
'c7': {'a': 3, 'b': 3},
'c8': {'a': 3, 'b': 4}}
关于python - 在Python中组合字典中列表的所有排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60122132/