我有这样一本字典 -
{'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 风格的方法是什么?
最佳答案
你可以像这样一起使用列表理解和字典理解
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
与字典推导式正在构造的字典的key相匹配时,再添加 1
到它。 (key1 == key)
仅当两个键都匹配时才会计算为 1
,否则将为零。
关于python - python中字典的排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22755066/