You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现字典列表按name和school分组,合并age为列表

解决方案

可以通过分组字典来实现需求,核心思路是用(name, school)的元组作为唯一键,把相同组合的age收集到列表中,最后再根据列表长度决定是保留单个值还是列表形式。

代码实现

original_list = [
    {'name': 'Jane', 'age': 12, 'school': 'SIT'},
    {'name': 'John', 'age': 13, 'school': 'SMU'},
    {'name': 'Jane', 'age': 14, 'school': 'SIT'},
    {'name': 'Jane', 'age': 16, 'school': 'SIT'},
    {'name': 'John', 'age': 13, 'school': 'NUS'}
]

# 用临时字典分组,键是(name, school)元组,值是age列表
grouped = {}
for item in original_list:
    key = (item['name'], item['school'])
    if key not in grouped:
        grouped[key] = []
    grouped[key].append(item['age'])

# 转换为目标格式的列表
result = []
for (name, school), ages in grouped.items():
    # 如果只有一个age,就保留单个值,否则用列表
    age_val = ages[0] if len(ages) == 1 else ages
    result.append({'name': name, 'age': age_val, 'school': school})

print(result)

输出结果

[
    {'name': 'Jane', 'age': [12, 14, 16], 'school': 'SIT'},
    {'name': 'John', 'age': 13, 'school': 'SMU'},
    {'name': 'John', 'age': 13, 'school': 'NUS'}
]

代码说明

  1. 分组阶段:遍历原始列表,用(name, school)作为唯一标识(元组可哈希,能作为字典键),把所有同组的age收集到列表中。
  2. 格式转换阶段:遍历分组后的字典,判断每个组的age列表长度:如果只有一个元素,就直接取单个值;如果多个,就保留列表,最后组装成目标字典并加入结果列表。

这种方法逻辑清晰,时间复杂度为O(n)(n是原始列表的元素个数),效率较高,也能完美匹配你的需求。

内容的提问来源于stack exchange,提问作者Qinisterr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 18:35:30