【问题标题】:Sorting a list of objects by a string attribute while ignoring case in Python? [closed]在Python中忽略大小写时按字符串属性对对象列表进行排序? [关闭]
【发布时间】: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


【解决方案1】:

按照建议,将字符串映射为小写字母后进行比较:

itemsList.sort(key=lambda item : item.Name.lower())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 2011-10-11
    • 2010-10-08
    相关资源
    最近更新 更多