【发布时间】:2018-08-07 14:00:08
【问题描述】:
我能够使用这篇出色的帖子按字符串属性对对象列表进行排序:
How to sort a list of objects based on an attribute of the objects?
但是,我还需要在按字母顺序排序时忽略大小写。假设我有一个对象列表,每个对象都有一个属性“名称”:
class MyObject (object):
def __init__(self):
MyObject.Name = None
itemsList = []
object1 = MyObject()
object1.Name = "Orange"
itemsList.append(object1)
object2 = MyObject()
object2.Name = "apple"
itemsList.append(object2)
object3 = MyObject()
object3.Name = "Banana"
itemsList.append(object3)
我可以这样对它们进行排序:
itemsList.sort(key=lambda item : item.Name)
但是我如何也忽略大小写?我尝试在最后一行将lower 扔到Name 上,但它对我不起作用。
【问题讨论】:
-
您是把
lower扔到Name还是lower()上?后者应该可以工作。 -
@tobias_k 啊,你是对的。谢谢!
-
如果答案是微不足道的,请随意删除。
-
小心。在您的
__init__方法中,您实际上是在定义类级别属性而不是实例属性。当您执行instance.Name = ...时,您只是碰巧分配了一个实例属性。如果您尝试对可变对象执行此操作,您的代码将显示一些非常添加的行为。您应该使用self在__init__中分配实例属性:self.name = None -
另外,它是
self.Name = None,而不是MyObject.Name = None,并且在Python 中使用小写加下划线的属性名称是惯例。
标签: python list sorting lambda