python - python中字典的排列

标签 python permutation python-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}]

执行此操作最符合 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/

相关文章:

algorithm - 'n'数字的排列顺序

python - 使用 itertools 在 Python 中进行幂集

python - 可逆笛卡尔积元素/索引转换功能

python - 从Python子线程接收数据的简单方法

python - 证书错误 : hostname doesn't match

python - 生成排列的所有一步变体

arrays - 当数组数量和每个数组的长度未知时生成字符组合的所有排列

python - 从 Flask 中的另一个目录下载文件

python - 如何将文本更改为数字并在 Python 中保存到数组中

使用将列表作为值的字典对列表进行分组的 Pythonic 方法