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

Python字典列表用Getter函数报错:list indices must be integers or slices, not tuple

解决使用自定义Getter函数删除字典列表元素时的"list indices must be integers or slices, not tuple"错误

你需要删除字典列表中"day"值处于指定区间的元素,且想用自定义的get_transaction_day函数替代直接访问elem["day"],但运行时触发了"list indices must be integers or slices, not tuple"错误。

错误原因

这个错误通常是因为你错误地将列表+索引的元组传给了getter函数,或是getter的参数设计不符合使用场景——正确的getter应该接收单个字典元素,而非列表与索引的组合。

正确实现方案

第一步:定义正确的Getter函数

def get_transaction_day(transaction):
    return transaction["day"]

方式1:列表推导式(推荐,创建新列表)

逻辑清晰,不会因索引偏移出错:

lst = [{"day": 1, "sum": 25, "type": 'in'}, {"day": 2, "sum": 55, "type": 'in'}, {"day": 3, "sum": 154, "type": 'out'}, {"day": 4, "sum": 99, "type": 'in'}]

def get_transaction_day(transaction):
    return transaction["day"]

# 过滤掉day在1-3之间的元素
filtered_lst = [elem for elem in lst if not (1 <= get_transaction_day(elem) <= 3)]
print(filtered_lst)
# 输出:[{"day": 4, "sum": 99, "type": 'in'}]

方式2:原地删除(倒序遍历原列表)

若需修改原列表而非创建新列表,必须倒序遍历(避免元素删除后索引偏移):

lst = [{"day": 1, "sum": 25, "type": 'in'}, {"day": 2, "sum": 55, "type": 'in'}, {"day": 3, "sum": 154, "type": 'out'}, {"day": 4, "sum": 99, "type": 'in'}]

def get_transaction_day(transaction):
    return transaction["day"]

# 倒序遍历索引,防止删除元素后索引错乱
for i in range(len(lst)-1, -1, -1):
    day = get_transaction_day(lst[i])
    if 1 <= day <= 3:
        del lst[i]

print(lst)
# 输出:[{"day": 4, "sum": 99, "type": 'in'}]

常见错误写法示例

如果你的getter设计成需要接收列表和索引,或是调用时错误传入了元组(比如enumerate返回的索引+元素组合),就会触发错误:

# 错误的Getter写法
def get_transaction_day(lst, idx):
    return lst[idx]["day"]

# 错误的调用方式(传入了元组)
# filtered_lst = [elem for elem in enumerate(lst) if not (1 <= get_transaction_day(elem) <=3)]
# 此处elem是(索引, 元素)的元组,被当作第一个参数传给get_transaction_day后,会尝试用元组索引列表,触发错误

内容的提问来源于stack exchange,提问作者Sebastian Filipovici

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:05:29