我有这样的字典 –
{'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,否则将为零.