Python中字典的排列组合
我有一个字典,长得像这样 -
{'A': 0, 'B': 0, 'C': 0, 'D': 4}
我想生成一个像这样的列表 -
[{'A': 1, 'B': 0, 'C': 0, 'D': 4},
{'A': 0, 'B': 1, 'C': 0, 'D': 4},
{'A': 0, 'B': 0, 'C': 1, 'D': 4},
{'A': 0, 'B': 0, 'C': 0, 'D': 5}]
用最符合Python风格的方法来实现这个,有什么好办法吗?
1 个回答
5
你可以把列表推导和字典推导一起使用,像这样:
d = {'A': 0, 'B': 0, 'C': 0, 'D': 4}
print [{key1: d[key1] + (key1 == key) for key1 in d} for key in d]
输出结果
[{'A': 1, 'B': 0, 'C': 0, 'D': 4},
{'A': 0, 'B': 0, 'C': 1, 'D': 4},
{'A': 0, 'B': 1, 'C': 0, 'D': 4},
{'A': 0, 'B': 0, 'C': 0, 'D': 5}]
这个方法的核心思想是为每个 key
生成一个新的字典。当这个 key
和正在用字典推导构建的字典的键匹配时,就给它加 1
。也就是说,只有当两个键相同的时候,(key1 == key)
才会返回 1
,否则就是零。