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

Python中按Type和Name字段拆分JSON列表对象的更优实现方法咨询

Python中按Type和Name字段拆分JSON列表对象的更优实现方法咨询

嗨,我看了你目前的实现思路,虽然能达到目标,但代码有点冗余,而且如果后续新增其他Type值(比如CCC),你就得手动加新的判断分支,扩展性不太好。我来给你分享两种更简洁通用的实现方式,让代码更灵活~

首先先回顾下你的原始数据:

Data = [
    {'Name': 'A1', 'Value': 10, 'Type': 'AAA'},
    {'Name': 'A1', 'Value': 20, 'Type': 'AAA'},
    {'Name': 'B1', 'Value': 10, 'Type': 'AAA'},
    {'Name': 'C1', 'Value': 10, 'Type': 'BBB'},
    {'Name': 'D1', 'Value': 10, 'Type': 'BBB'}
]

方法一:动态字典嵌套循环

这种方式完全不需要硬编码Type的取值,自动处理所有可能的Type和Name:

result = {}
for item in Data:
    type_key = item['Type']
    name_key = item['Name']
    
    # 如果当前Type还没在结果字典里,先创建对应的空字典
    if type_key not in result:
        result[type_key] = {}
    # 如果当前Name还没在Type对应的字典里,先创建对应的空列表
    if name_key not in result[type_key]:
        result[type_key][name_key] = []
    # 把当前元素添加到对应的列表中
    result[type_key][name_key].append(item)

print(result)

这种写法逻辑清晰,不管后续新增多少种Type或Name,代码都不用修改,直接就能适配,也省去了维护多个临时列表的麻烦。

方法二:用collections.defaultdict简化代码

如果想让代码更简洁,可以用Python标准库的defaultdict,它能自动帮我们创建不存在的键对应的默认值:

from collections import defaultdict

# 外层是Type对应的字典,内层是Name对应的列表
result = defaultdict(lambda: defaultdict(list))
for item in Data:
    result[item['Type']][item['Name']].append(item)

# 如果你需要把defaultdict转换成普通字典(可选,defaultdict本身可以当字典用)
result = dict(result)

这种写法非常精简,一行循环就完成了所有分组逻辑,可读性也很强,推荐在项目中使用。

对比你原来的写法,这两种方法都不需要手动维护多个临时列表和名称集合,扩展性和可维护性都提升了不少,希望能帮到你~

备注:内容来源于stack exchange,提问作者SM079

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 10:44:34