Python更新JSON文件键值报错:unhashable type:'dict' 求助
解决JSON文件更新时的"unhashable type:'dict'"错误
错误原因分析
- 字典不可作为字典键:你在循环中用
processdetails(这是一个字典对象)作为Write_data的键,而字典属于不可哈希类型,无法作为字典的键使用,这直接触发了unhashable type:'dict'错误。 - 变量大小写不一致:代码中定义的变量是
write_data(小写w),但后续写的是Write_data(大写W),会引发未定义变量问题。 - 文件写入时机不合理:每次循环都打开文件写入,既降低效率,也可能导致数据覆盖或写入不完整。
修正后的代码
import json def function_to_retreive_path(process_id): # 替换为你的实际路径获取逻辑 return f"updated_path_{process_id}" # 读取JSON文件内容 with open("process_details.json", "r") as jsonfile: write_data = json.load(jsonfile) # 遍历每个process,更新path字段 for processdetails in write_data['process']: new_path = function_to_retreive_path(processdetails['id']) # 直接修改当前字典的path属性,无需用字典当键 processdetails['path'] = new_path # 所有更新完成后,一次性写入文件 with open("process_details.json", "w") as outfile: json.dump(write_data, outfile, indent=4) # indent参数优化JSON格式可读性
关键修正说明
- 直接修改循环元素:
processdetails是write_data['process']列表中的字典元素,修改它会直接同步到原数据结构,无需通过键值对间接访问。 - 统一变量命名:确保
write_data大小写全程一致,避免未定义变量错误。 - 延迟文件写入:所有process的path更新完成后,再执行一次写入操作,减少IO开销,保证数据完整性。
内容的提问来源于stack exchange,提问作者Pechiyappan Raj
相关产品推荐
相关产品推荐

