Python中如何正确比较两个JSON字典?(含错误排查)
解决你的字典比较TypeError问题
嘿,咱们先把问题拆解开——你碰到的TypeError: string indices must be integers错误,根源出在这行代码:n_temp_new = json.dumps(n_temp, ensure_ascii=False)。
你看,json.load(f)已经把palestra.json里的内容转成了Python字典n_temp,这一步是对的。但紧接着你用json.dumps()把这个字典又转回了JSON格式的字符串,然后你试图用n_temp_new['giorno']去访问这个字符串的内容——这就错了,字符串只能用整数下标(比如n_temp_new[0])来取单个字符,根本不支持用字典键名来索引。
修正后的代码
直接去掉多余的json.dumps()步骤,用加载出来的字典直接做比较就行:
#!/usr/bin/env python import json template = {"giorno": 21, "mese": "aprile", "ora": "21"} newww = "palestra.json" g_temp = template['giorno'] with open(newww, 'r') as f: n_temp = json.load(f) print(n_temp) # 输出的是Python原生字典 # 直接用字典的键访问对应值做比较 if g_temp == n_temp['giorno']: print("no") else: print("yes")
额外补充:整体比较字典
如果你想直接判断两个字典(模板和JSON加载的内容)是否完全一致,还可以简化成:
if template == n_temp: print("两个字典完全匹配") else: print("两个字典有差异")
再理清楚json模块的两个核心方法:
json.load():负责反序列化,把JSON文件/字符串转成Python的字典、列表等原生数据结构,这是你加载JSON文件时需要用的。json.dumps():负责序列化,把Python对象转成JSON格式的字符串,只有当你需要把数据转成字符串存储、传输的时候才需要用到它,这里完全没必要。
内容的提问来源于stack exchange,提问作者Luca Deila
相关产品推荐
相关产品推荐

