python - 从键、值元组列表创建字典,同时维护重复键

标签 python

所以我理解了以下效果:

dict((x.key, x.value) for x in y)

当然,问题在于,如果有多个具有相同值的 x.key,它们会与具有特定 的最后一个 x.value 一起折叠code>x.key 作为唯一幸存的成员。我实际上想将生成的字典的值作为一个列表:

{
    'key1': ['value1'],
    'key2': ['value2', 'value3', 'value4'],
    'key3': ['value5'],
    # etc.
}

这个逻辑是否可以理解?

最佳答案

您可以将元素一个一个地添加到默认包含空列表的字典中:

import collections

result_dict = collections.defaultdict(list)
for x in y:
    result_dict[x.key].append(x.value)

你也可以在不使用集合模块的情况下做一些非常相似的事情:

result_dict = {}
for x in y:
    result_dict.setdefault(x.key, []).append(x.value)

但这可以说有点不太清晰。

一个等效的、更易读的(不需要“解析”不太常见的 setdefault)但更行人的基本 Python 方法是:

result_dict = {}
for x in y:
    if x.key not in result_dict:
        result_dict[x.key] = []
    result_dict[x.key].append(x.value)

第一个解决方案显然是首选,因为它同时简洁、易读且快速。

关于python - 从键、值元组列表创建字典,同时维护重复键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6795361/

相关文章:

python - Google 搜索 API - 仅返回 4 个结果

python - 创建随机 0 和 1 列表的优雅方式

python - 使用字符串和 python 列表参数从终端运行 shell 脚本

python - 使用三个查询执行联合 - SQLAlchemy

Python(json)如何将同名的每个键添加到列表中

python - 有没有办法将参数传递给 Flask-ReSTLess GET_SINGLE 预处理器?

python - 在Python中创建多色散点图

python - 结果未打印,为什么 `print` 在 `return` 之后被忽略?

python - 如何从INPUT生成范围内的随机数?

python - 查找可能包含 NAN 的一维数组的最大值