将字典值提取至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
相关产品推荐
相关产品推荐

