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

如何不拆分列表对Car对象列表按字母排序?解决下标访问报错

解决Car对象列表排序时的TypeError问题

错误原因

TypeError: 'Car' object is not subscriptable 是因为你把Car对象当成了列表、元组这类可下标访问的序列,但Car类默认没有实现下标访问逻辑,所以用v[0]、v[1]去"取值"是不合法的。

解决方案

方案1:直接访问Car对象的属性(推荐)

如果你的Car类有需要按字母排序的属性(比如品牌brand、车型model),直接通过属性名访问作为排序键即可:

class Car:
    def __init__(self, brand, model):
        self.brand = brand
        self.model = model

# 创建Car对象列表
cars = [
    Car("Toyota", "Camry"),
    Car("Honda", "Civic"),
    Car("Toyota", "Corolla")
]

# 按品牌、车型的字母顺序排序
cars.sort(key=lambda car: (car.brand, car.model))

# 验证排序结果
for car in cars:
    print(f"{car.brand} {car.model}")

输出结果:

Honda Civic
Toyota Camry
Toyota Corolla

方案2:给Car类实现下标访问(仅特殊场景使用)

如果一定要保留v[0]、v[1]的写法,可以给Car类添加__getitem__方法,让它支持下标访问指定属性:

class Car:
    def __init__(self, brand, model):
        self.brand = brand
        self.model = model
    
    def __getitem__(self, index):
        if index == 0:
            return self.brand
        elif index == 1:
            return self.model
        raise IndexError("Car object only supports index 0 and 1")

cars = [
    Car("Toyota", "Camry"),
    Car("Honda", "Civic"),
    Car("Toyota", "Corolla")
]

# 现在可以用原lambda表达式排序
cars.sort(key=lambda v: (v[0], v[1]))

这种方式没必要,直接访问属性的写法更直观易懂。

内容的提问来源于stack exchange,提问作者Jan Nowak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:42:05