字典列表比较报错:TypeError: tuple indices must be integers or slices, not str 问题求助
问题分析与解决
首先咱们得揪出报错的根源:你在示例2里定义的file1和file2不是字典列表,而是元组!当你写{'name': 'Phill', 'age': 42},{'name': 'Phill', 'age': 22}时,Python会默认把它当成一个包含两个字典的元组,而元组只能用整数索引(比如file1[0]取第一个字典),你直接用file1['age']自然会触发tuple indices must be integers or slices, not str的错误。
另外你的diffValue函数逻辑也有问题:循环for newAge in file1,file2 :是把file1和file2作为两个独立元素来遍历,而不是逐个对比两个集合里的对应字典;而且比较逻辑也没对应到每个字典的位置。
修正步骤
1. 正确定义字典集合
把示例2的变量改成列表(用[]包裹),这样既可以遍历,也符合你“两组字典数据”的需求:
file1 = [{'name': 'Phill', 'age': 42}, {'name': 'Phill', 'age': 22}] file2 = [{'name': 'Phill', 'age': 22}, {'name': 'Phill', 'age': 52}]
2. 重写对比函数
根据你的预期(返回file1中与file2对应位置age有差异的字典),调整函数逻辑:
def diffValue(file1, file2): # 存储有差异的结果 diff_results = [] # 同时遍历file1和file2的对应字典 for dict1, dict2 in zip(file1, file2): if dict1['age'] != dict2['age']: # 若age不同,把file1里的字典加入结果 diff_results.append(dict1) # 如果没有差异,打印提示;否则返回结果列表 if not diff_results: print("No difference found") return None return diff_results
3. 测试运行
调用函数后会得到你想要的结果:
result = diffValue(file1, file2) print(result) # 输出:[{'name': 'Phill', 'age': 42}, {'name': 'Phill', 'age': 22}]
额外说明
zip(file1, file2)会把两个列表中对应位置的字典配对,确保你是在对比同一位置的元素;- 如果两个列表长度不一致,
zip会以较短的那个为准,如果你需要处理长度不同的情况,可以用itertools.zip_longest来补充默认值。
内容的提问来源于stack exchange,提问作者iron001
相关产品推荐
相关产品推荐

