python中字典的排列

时间:2014-03-31 06:43:52

标签: python permutation itertools

我有这样的字典 -

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

最狡猾的方式是什么?

1 个答案:

答案 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,否则它将为零。