python - 在python中的字典中组合列表的所有排列
问题描述
给定初始字典
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-3.x - 如何将我的无线键盘作为标准输入分配给 python3 脚本?
- javascript - 运行节点服务器时无法获取/错误
- javascript - 我的 discord.js 代码说它不能输出空消息,即使它不应该是空的
- node.js - 如何在 typescript express 中设置 cors()
- cordova - 雪包构建和科尔多瓦构建的路径错误
- html - 将文本设置为在下拉列表中向左对齐?
- python - 条目未显示在 django 表中
- c++ - E447: 在路径中找不到文件“iostream”
- plotly - Plotly - yaxis 最小值和最大值未显示
- bootstrap-4 - 如何在引导程序 4 的工具提示中格式化双向文本?