Python中字典的排列组合

3 投票
1 回答
1835 浏览
提问于 2025-04-18 00:38

我有一个字典,长得像这样 -

{'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风格的方法来实现这个,有什么好办法吗?

1 个回答

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,否则就是零。

撰写回答