Python:根据对象的属性对对象列表进行排序

Python:根据对象的属性对对象列表进行排序,python,list,class,sorting,Python,List,Class,Sorting,作为前言,我已经查看了与这个问题相关的帖子,但它们并没有完全回答我的问题 因此,我只想知道如何根据对象的属性以两种方式对对象列表进行排序: 如果属性是字符串(按字母顺序排列) 如果属性是整数(按数字顺序执行) 这是我的课程列表: mainList = [ hero( name='SirGoose', classes='Fighter', level=150 ), hero( name='Conan', classes='Barbarian', level=160 ), h

作为前言,我已经查看了与这个问题相关的帖子,但它们并没有完全回答我的问题

因此,我只想知道如何根据对象的属性以两种方式对对象列表进行排序:

  • 如果属性是字符串(按字母顺序排列)
  • 如果属性是整数(按数字顺序执行)
  • 这是我的课程列表:

    mainList = [
        hero( name='SirGoose', classes='Fighter', level=150 ),
        hero( name='Conan', classes='Barbarian', level=160 ),
        hero( name='KingArthur', classes='Knight', level=170 )
    ]
    
    所以我真正想找的是一种方法来对这个列表进行排序,英雄的名字按字母顺序排序,然后是另一种级别的方法。谢谢大家!

    ,接受可选的
    参数。传递一个键函数。函数的返回值用于比较,而不是原始值:

    >>> from collections import namedtuple
    >>> hero = namedtuple('hero', ['name', 'classes', 'level'])
    >>>
    >>> mainList = [
    ...     hero(name='SirGoose', classes='Fighter', level=150 ),
    ...     hero(name='Conan', classes='Barbarian', level=160 ),
    ...     hero( name='KingArthur', classes='Knight', level=170 )
    ... ]
    >>> sorted(mainList, key=lambda h: (h.name, h.level))
    [hero(name='Conan', classes='Barbarian', level=160),
     hero(name='KingArthur', classes='Knight', level=170),
     hero(name='SirGoose', classes='Fighter', level=150)]
    
    注意:此处使用的键函数(
    lambda
    )返回一个元组。元组是逐项比较的。如果第一个项目相同,则比较下一个项目

    >>> ('SirGoose', 12) < ('Barbarian', 160)
    False
    >>> ('SirGoose', 12) < ('SirGoose', 160)
    True
    
    >>> import operator
    >>> sorted(mainList, key=operator.attrgetter('name', 'level'))
    [hero(name='Conan', classes='Barbarian', level=160),
     hero(name='KingArthur', classes='Knight', level=170),
     hero(name='SirGoose', classes='Fighter', level=150)]