我有这样的字典 -
{'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}]
最狡猾的方式是什么?
答案 0 :(得分: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
,否则它将为零。