python - 在 Python 中聚合一个字典中的值以填充另一个字典

标签 python pandas dictionary

我有一个大约 12K 字典的列表。每个字典都有相同的键:yearcodecategory

L = [{"year": "2015", "code": "VU", "category": "Vulnerable"}, {"year": "2008", "code": "VU", "category": "Vulnerable"}, {"year": "2004", "code": "LC", "category": "Least Concern"}]

我正在尝试创建一个新字典,其中将 code 的每个值作为键,并将每个 code 的唯一年份列表作为该键的值 (我不一定需要 category 键值对):

{"VU": {2008, 2015}, "LC": {2004}}

我创建了一个字典codes_dict,其中正确的代码作为键,空集作为值(因为我不想重复,而且我真的只需要最早和最近的年份。)

codes = (e['code'] for e in L)
codes_dict = dict.fromkeys(codes, set())

for e in L:
    codes_dict[e['code']].add(e['year'])

但是,当我尝试填充这些值时,我会将每年添加到每个代码中:

{'VU': {'2004', '2008', '2015'}, 'LC': {'2004', '2008', '2015'}}

我错过了什么?我尝试使用 list 而不是 set 并得到相同的结果(有重复项)。另外使用 = 而不是 add() 意味着仅添加最后一个值,而我想要整个范围。

性能并不是真正的问题,因为这只是一个快速诊断。

奖励:如果有更好的方法在 pandas 中做到这一点,我很想听听。

谢谢!

最佳答案

在您的代码中,所有值都指向同一组。尝试改为(使用 defaultdict;您可以改为使用 get 并将每个元素设置为新集合(如果尚不存在)

from collections import defaultdict

L = [{"year": "2015", "code": "VU", "category": "Vulnerable"}, {"year": "2008", "code": "VU", "category": "Vulnerable"}, {"year": "2004", "code": "LC", "category": "Least Concern"}]


codes_dict = defaultdict(set)
for e in L:
    codes_dict[e['code']].add(e['year'])

print(dict(codes_dict))

关于python - 在 Python 中聚合一个字典中的值以填充另一个字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59505654/

相关文章:

python - 覆盖 CSV 文件中的现有列表 Python

python - 如何将具有多个结果集的 SQL Server 存储过程的输出保存到 pandas 中的每个数据帧中

python - 根据条件从字典列表中生成唯一的字典对

c++ - 对于由计算的 double 值组成的键,在 map 或 unordered_map 之间进行选择。

python - 如何将两个 DataFrame 的特定列索引为一个 DataFrame?

python - 将前 N 个 key 对从有序字典获取到另一个

python - 如何访问 python groupby 对象值

python - South 不认识我的模型

python - 无法初始化 Spark 上下文

python - 如何使用列表作为数据框中的搜索条件?