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}]

什么是最pythonic的方式来做到这一点?

解决方法:

你可以像这样使用列表理解和字典理解

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}]

这个想法是为每个键生成一个新的字典,当键与正在用字典理解构造的字典的键匹配时,然后向它添加1. (key1 == key)仅在两个键匹配时才会计算为1,否则将为零.

上一篇:教你用PS去除背景中含有规则的纹路杂物


下一篇:PHP从2D数组计算每个排列