对于extend和append无法解决的字典解析情况

python 复制代码
# 问题根源:json.load() 出来的数据可能是列表、字典、字符串等不同类型
# 单纯用 extend 或 append 都无法正确处理所有情况

# 错误示例1:只用 extend
# conversations.extend(data)
# 问题:data 是字典时会报错 TypeError,data 是字符串时会被拆成字符

# 错误示例2:只用 append  
# conversations.append(data)
# 问题:data 是列表时会把整个列表作为一个元素嵌套进去,不是想要的扁平结构

# 错误示例3:遍历添加
# for item in data:
#     conversations.append(item)
# 问题:data 是字符串时遍历得到的是单个字符


# extend()	将可迭代对象(列表、字符串、元组等)的每个元素逐个加入原列表
# append()	将参数作为一个整体加入原列表
# isinstance(data, list)	判断 data 是不是列表类型
# isinstance(data, dict)	判断 data 是不是字典类型
# .get()	字典的方法,用于安全地获取键对应的值(不存在时返回默认值)

# 正确方式
# 情况1:data是列表 -> 遍历每个元素
if isinstance(data, list):
    conversations.extend(data)
# 情况2:data 是字典 -> 直接添加
elif isinstance(data, dict):
    conversations.append(data)

# 正确处理方式:先判断类型
with zipfile.ZipFile(ZIP_FILE, 'r') as zf:
    for filename in zf.namelist():
        if filename.endswith('.json'):
            data = json.load(zf.open(filename))
            
            if isinstance(data, list):
                conversations.extend(data)      # 列表直接展开
            elif isinstance(data, dict):
                conversations.append(data)      # 字典整体添加
            else:
                # 字符串或其他类型,按需求处理或跳过
                print(f"跳过 {filename},类型为 {type(data)}")
                continue

后面处理时也要判断:

python 复制代码
for conv in conversations:
    if isinstance(conv, dict):
        title = conv.get('title', 'untitled')
        # 正常处理
    else:
        print(f"跳过非字典数据: {conv}")
相关推荐
张龙68714 小时前
uv 全面指南:比 pip 快 100 倍的 Python 包管理器,从安装到团队落地
后端·python
@HNUSTer15 小时前
Python数据可视化科技图表绘制系列教程(八)
python·数据可视化·科技论文·专业制图·科研图表
专注仿真15 小时前
问答大模型技术方案算法实现-熵权法融合算法 + 交叉编码器重排算法
人工智能·python·算法·语言模型·问答大模型关键算法·熵权融合算法·交叉编码器重排算法
满怀冰雪16 小时前
22-使用 PaddleClas 快速训练图像分类模型
人工智能·python·机器学习·分类·数据挖掘·paddlepaddle
gb421528716 小时前
python中Web应用服务器
开发语言·前端·python
reasonsummer18 小时前
【办公类-109-12】20260901圆形挂牌(模版重制:文本框圆形重叠_word编辑单面_接送卡&被子卡&床卡&入园卡)
python·word
名明鸣冥18 小时前
k8s-agent架构思考(一)
python
DoLovya19 小时前
从零实现 ESP8266 + MQTT 智能门禁:公网一键开门、舵机控制、在线监控完整方案
python·物联网·mqtt·嵌入式·esp8266·门禁系统
AI情绪识别开源19 小时前
检信ALLEMOTION VibrationAI 2.4.0 12维度情绪识别开源源代码
开发语言·python
极创信息19 小时前
国产化信创适配认证高频术语:信创适配、软件自主可控、国产化率、代码溯源率、代码自主率、代码开源率是什么?
java·python·struts·eclipse·开源·php·hibernate