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

编程入门 行业动态 更新时间:2024-10-26 20:23:03
本文介绍了Python:根据对象的属性对对象列表进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

仅作为开头,我已经检查过与该问题有关的帖子,而他们还没有完全回答我的问题.

Just to preface this, I've already checked out posts pertaining to this question and they haven't fully answered mine.

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

So I would just like to know how to sort a list of objects based on their attributes in two ways:

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

    mainList = [ hero( name='SirGoose', classes='Fighter', level=150 ), hero( name='Conan', classes='Barbarian', level=160 ), hero( name='KingArthur', classes='Knight', level=170 ) ]

    所以我真正想要的是一种将列表排序为英雄姓名按字母顺序排序的方法,然后是另一种用于级别的方法.谢谢!

    So what I'm really looking for is a way to sort this list to that the hero's names are sorted in alphabetical order, then another method for level. Thank you!

    推荐答案

    sorted , list.sort 接受可选的 key 参数.通过按键功能.该函数的返回值用于比较而不是原始值:

    sorted, list.sort accept optional key parameter. Pass a key function. The return value of the function is used for comparison instead of the original value:

    >>> 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 )返回一个元组.元组逐项进行比较.如果前一项相同,则比较下一项,...

    NOTE: the key function used here (lambda) returns a tuple. tuples are compared item by item. If the first items are same, the next items are compared, ...

    >>> ('SirGoose', 12) < ('Barbarian', 160) False >>> ('SirGoose', 12) < ('SirGoose', 160) True

    替代使用 operator.attrgetter >>> 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)]

    更多推荐

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

    本文发布于:2023-11-30 05:47:48,感谢您对本站的认可!
    本文链接:https://www.elefans.com/category/jswz/34/1648925.html
    版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
    本文标签:对象   属性   列表   Python

    发布评论

    评论列表 (有 0 条评论)
    草根站长

    >www.elefans.com

    编程频道|电子爱好者 - 技术资讯及电子产品介绍!