Python 使用理解合并字典键和值

标签 python dictionary list-comprehension consolidation

我如何使用 python COMPREHENSION 巩固以下内容

FROM(字典列表)

[
 {'server':'serv1','os':'Linux','archive':'/my/folder1'}
 ,{'server':'serv2','os':'Linux','archive':'/my/folder1'}
 ,{'server':'serv3','os':'Linux','archive':'/my/folder2'}
 ,{'server':'serv4','os':'AIX','archive':'/my/folder1'}
 ,{'server':'serv5','os':'AIX','archive':'/my/folder1'}
]

TO(以元组为键的字典列表和以“服务器编号”为值的列表

[
 {('Linux','/my/folder1'):['serv1','serv2']}
 ,('Linux','/my/folder2'):['serv3']}
 .{('AIX','/my/folder1'):['serv4','serv5']}
]

最佳答案

需要能够为您的字典设置默认值并多次使用相同的键可能会使字典理解有点笨拙。我更喜欢这样的东西:

一个defaultdict可能有帮助:

from collections import defaultdict

lst = [
 {'server':'serv1','os':'Linux','archive':'/my/folder1'},
 {'server':'serv2','os':'Linux','archive':'/my/folder1'},
 {'server':'serv3','os':'Linux','archive':'/my/folder2'},
 {'server':'serv4','os':'AIX','archive':'/my/folder1'},
 {'server':'serv5','os':'AIX','archive':'/my/folder1'}
]

dct = defaultdict(list)

for d in lst:
    key = d['os'], d['archive']
    dct[key].append(d['server'])

如果你希望最后有一个标准的字典(实际上我真的没有看到一个很好的理由)你可以使用 dict.setdefault为了创建一个空列表,其中键尚不存在:

dct = {}

for d in lst:
    key = d['os'], d['archive']
    dct.setdefault(key, []).append(d['server'])

documentation on defaultdict (vs. setdefault) :

This technique is simpler and faster than an equivalent technique using dict.setdefault()

关于Python 使用理解合并字典键和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45049312/

相关文章:

python - 这个列表理解有什么问题(SyntaxError : invalid syntax)?

python - 如何制作 python-mysqldb 模板?

python - 从两个列表创建字典?在取平均值时?

python - python 中 range() 参数的顺序

python - 如何在发送 POST 请求之前显示正文和 header ?

java - 从另一个列表更新列表

python - 测试值是否存在于多个列表中

python - 在 Python 中聚合简单字典的最佳方法

java - 映射、分组、值列表

arrays - 是否可以检查字符串是否与数组或字典中的字符串匹配,Swift?