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

将字典值提取至TXT文件时遇TypeError,求代码修正方案

代码错误修正方案

错误原因

你遇到的TypeError: 'int' object is not subscriptable,是因为遍历new_dict时拿到的是字典的键(也就是id对应的整数值),而非包含text字段的子字典。Python遍历普通字典时,默认只会迭代它的键集合,不是键值对或值。

修正思路

根据new_dict的实际结构分两种情况处理:

  • 如果new_dict是字典列表(格式:[{'id':0, 'text':...}, {'id':1, 'text':...}]):检查是否误将列表转为字典,确保遍历的是列表元素。
  • 如果new_dict是以id为键的嵌套字典(格式:{0: {'text':...}, 1: {'text':...}}):改为遍历字典的值(也就是每个带text的子字典)。

完整修正代码

以下是适配第二种常见场景的修正代码,同时补充了处理剩余数据的逻辑(避免总数非5000倍数时丢失数据),并修复了路径转义问题:

from tqdm.auto import tqdm  # loading bar

text_data = []
file_count = 0
# 遍历字典的values(),拿到每个包含text的子字典
for sample in tqdm(new_dict.values()):
    # 替换换行符为\s,避免拆分行
    processed_text = sample['text'].replace('\n', '\s')
    text_data.append(processed_text)
    
    # 每攒够5000条写入文件
    if len(text_data) == 5_000:
        # 用raw字符串处理路径,避免转义问题
        with open(r'file_path\oscar_data\oscar_%s.txt' % file_count, 'w', encoding='utf-8') as fp:
            fp.write('\n'.join(text_data)) 
        text_data = []
        file_count += 1

# 处理最后一批不足5000条的数据
if text_data:
    with open(r'file_path\oscar_data\oscar_%s.txt' % file_count, 'w', encoding='utf-8') as fp:
        fp.write('\n'.join(text_data))

额外说明

  • 路径前加r表示raw字符串,避免\o、\s这类字符被误解析为转义序列。
  • 新增的if text_data判断,确保所有数据都能被写入文件,不会遗漏剩余内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 09:12:47