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

字典列表比较报错: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 19:27:31