python 按照对象某一属性排序

前言:

工作中经常需要用到排序,单纯的数字排序还好说,但是有时候要按照对象的某一属性对对象进行排序,这时候会稍微麻烦点,不过 python 中有现成的方法解决这种窘境。

1.调用 list 排序方法

不 bb,直接上代码,总共三个例子
1.普通列表
2.复杂列表
3.对象排序

class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

if __name__ == '__main__':
    a = (0, 8, 2, 6, 3)
    b = [('a', 12), ('b', 12), ('c', 1), ('d', 13), ('e', 2)]
    person_list = [Person('q', 2), Person('w', 1), Person('e', 3), Person('r', 6)]
    a.sort(cmp=None, key=None, reverse=True)   # reverse 参数为 True 时逆向排序
    print a
    b.sort(key=lambda x: x[1])
    print b
    person_list.sort(key=lambda x: x.age)
    for i in person_list:
        print i.age

结果:

[8, 6, 3, 2, 0]
[('c', 1), ('e', 2), ('a', 12), ('b', 12), ('d', 13)]
1
2
3
6

2.调用 sorted 方法

和上面一样的例子,其实 sorted 方法和 list.sort 使用方法几乎一样

class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age


if __name__ == '__main__':
    a = [0, 8, 2, 6, 3]
    b = [('a', 12), ('b', 12), ('c', 1), ('d', 13), ('e', 2)]
    person_list = [Person('q', 2), Person('w', 1), Person('e', 3), Person('r', 6)]
    print sorted(a)
    print sorted(b, key=lambda x: x[1])
    m = sorted(person_list, key=lambda x: x.age, reverse=True)
    for i in m:
        print i.age

结果:

[0, 2, 3, 6, 8]
[('c', 1), ('e', 2), ('a', 12), ('b', 12), ('d', 13)]
6
3
2
1

3.结语

非常复杂的排序就需要自己写了,一般上面那个方法用一下就基本满足需求了。

发布了76 篇原创文章 · 获赞 46 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/qingquanyingyue/article/details/104069765