如何不使用Lambda重写基于对象symbol属性的sorted排序代码
不用Lambda实现对象列表按属性排序
推荐方案:使用operator.attrgetter
这是替代lambda获取对象属性排序最常用、最简洁的方式,无需额外定义方法:
- 导入operator模块:
import operator
- 修改排序代码(注意替换为你实际的属性名:你提到属性是
sym,但原lambda用的是symbol,请对应调整):
# 如果对象属性是sym self.list = sorted(self.list, key=operator.attrgetter('sym')) # 如果对象属性是symbol(和原lambda逻辑一致) self.list = sorted(self.list, key=operator.attrgetter('symbol'))
备选方案:使用类中的get_sym方法
如果你坚持要用类内的get_sym方法,需确保方法定义正确,且传递方式无误:
假设你的类定义如下(包含返回属性的实例方法):
class YourClass: def __init__(self, sym, x, y): self.sym = sym self.x = x self.y = y def get_sym(self): return self.sym
排序时直接传递类的方法对象即可(未绑定的实例方法会自动接收每个对象作为参数):
self.list = sorted(self.list, key=YourClass.get_sym)
注意:如果
get_sym是静态方法(用@staticmethod装饰),直接传递YourClass.get_sym同样有效,但实例方法的方式更符合类的设计逻辑。
内容的提问来源于stack exchange,提问作者Simplifeye
相关产品推荐
相关产品推荐

