按key分组字典列表:将字典列表按year聚合,合并其他字段为列表
按年份聚合字典列表的实现方法
需求说明
给定如下原始字典列表:
original_list = [ {'N': 2, 'year': 2005}, {'N': 3, 'year': 2005}, {'R': 4, 'year': 2005}, {'R': 5, 'year': 2005}, {'N': 2, 'year': 2006}, {'N': 3, 'year': 2006}, {'R': 4, 'year': 2006}, {'R': 5, 'year': 2006} ]
需要按year字段分组,将同一年份下其他键对应的值合并为列表,最终得到如下格式:
[ {'N': [2, 3], 'R': [4, 5], 'year': 2005}, {'N': [2, 3], 'R': [4, 5], 'year': 2006} ]
解决方案
方法1:固定键的手动聚合(适用于已知除year外的键)
如果确定除了year只有N和R两个键,直接初始化结构的代码更简洁:
year_groups = {} for item in original_list: year = item['year'] if year not in year_groups: year_groups[year] = {'year': year, 'N': [], 'R': []} for key, value in item.items(): if key != 'year': year_groups[year][key].append(value) result = list(year_groups.values()) print(result)
方法2:动态键的通用聚合(适用于未知键的场景)
如果除了year还可能有其他不确定的键,用动态创建列表的方式更通用:
year_groups = {} for item in original_list: year = item['year'] if year not in year_groups: year_groups[year] = {'year': year} for key, value in item.items(): if key == 'year': continue if key not in year_groups[year]: year_groups[year][key] = [] year_groups[year][key].append(value) result = list(year_groups.values()) print(result)
代码说明
- 先用字典
year_groups按年份分组,键为年份值,值为对应年份的聚合字典 - 遍历原始列表时,逐个将非
year键的值追加到对应年份的列表中 - 最后将字典的
values()转换为列表,得到最终的聚合结果
内容的提问来源于stack exchange,提问作者aneev
相关产品推荐
相关产品推荐

