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

如何按指定字段排序包含musicCD类对象的二维列表?

解决类对象列表的排序问题

嘿,我明白你的困扰啦!你之前尝试的itemgetter(1)或者lambda x: x[1]都是针对列表、元组这类可以通过索引直接访问元素的场景,但你的ArrayCD里存储的是musicCD类的实例对象,得通过调用对象的方法来获取排序依据才行~

正确的排序方法

方法1:使用Lambda表达式(最直观)

直接在key参数里定义一个lambda函数,接收每个musicCD对象,调用你需要的getter方法返回字段值作为排序键:

# 按getEdition()返回值升序排序
ArrayCD = sorted(ArrayCD, key=lambda cd: cd.getEdition())

# 如果需要倒序,加上reverse=True参数
ArrayCD = sorted(ArrayCD, key=lambda cd: cd.getEdition(), reverse=True)

方法2:使用operator.methodcaller(更简洁)

如果你喜欢更简洁的写法,可以用operator模块里的methodcaller,它专门用来调用对象的方法:

from operator import methodcaller

# 按getEdition()排序
ArrayCD = sorted(ArrayCD, key=methodcaller('getEdition'))

# 倒序同样加reverse=True
ArrayCD = sorted(ArrayCD, key=methodcaller('getEdition'), reverse=True)

其他字段排序示例

要是你想按其他字段排序,只需要替换对应的getter方法就行:

  • 按歌手排序:key=lambda cd: cd.getSinger() 或者 key=methodcaller('getSinger')
  • 按唱片数量排序:key=lambda cd: cd.getRecordsCount() 或者 key=methodcaller('getRecordsCount')

验证排序结果

排序后可以用你原来的遍历方式确认结果:

for cd in ArrayCD:
    print(cd.getSinger(), cd.getEdition(), cd.getRecordsCount())

为什么之前的方法失败?

你之前用的x[1]是试图把musicCD对象当成可索引的容器(比如列表、元组)去取第2个元素,但你的对象是自定义类的实例,并不支持索引访问,所以会触发错误。我们需要通过对象自身的方法来获取排序所需的字段值,这才是正确的打开方式~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:17:16