python----積累---python對象排序的方法收集

需要針對對象序列進行排序的,尤其是針對對象的某個屬性排序的場景最爲常見。

直接調用序列的sort方法

class Person(object):

    def __init__(self,age,name):
        self.age = age
        self.name = name


def personSort():
    persons = [Person(age,name) for (age,name) in [(12,"lili"),(18,"lulu"),(16,"kaka"),(12,"xixi")]]
    persons.sort(cmp=None,key=lambda x:x.age,reverse=False)
    for element in persons:
        print element.age,":",element.name

person對象裏兩個字段,一個age,一個name。排序的時候按照age來進行。

使用operator

def operatorSort():
    persons = [Person(age,name) for (age,name) in [(12,"lili"),(18,"lulu"),(16,"kaka"),(12,"xixi")]]
    try:
        import operator
    except ImportError:
        cmpfun = lambda x:x.age
    else:
        cmpfun = operator.attrgetter("age","name")

    persons.sort(key = cmpfun, reverse=False)
    for element in persons:
        print element.age,":",element.name

sorted

字典:

將phonebook的電話號按數字大小排序

>>> phonebook = {'Linda':'7750','Bob':'9345','Carol':'5834'}
>>> from operator import itemgetter
>>> sorted_pb = sorted(phonebook.iteritems(),key=itemgetter(1))
>>> sorted_pb
[('Carol', '5834'), ('Linda', '7750'), ('Bob', '9345')]

多維list:

對成績、等級多字段排序

>>> from operator import itemgetter
>>> gameresult = [['Bob',95.00,'A'],['Alan',86.0,'C'],['Mandy',82.5,'A'],['Rob',86,'E']]
>>> sorted(gameresult, key=itemgetter(2, 1))
[['Mandy', 82.5, 'A'], ['Bob', 95.0, 'A'], ['Alan', 86.0, 'C'], ['Rob', 86, 'E']]

字典中混合list:

>>> mydict = {'Li':['M',7],
... 'Zhang': ['E',2],
... 'Wang':['p',3],
... 'Du':['C',2]}
>>> from operator import itemgetter
>>> sorted(mydict.iteritems(),key=lambda(k,v):operator.itemgetter(1)(v))
[('Zhang', ['E', 2]), ('Du', ['C', 2]), ('Wang', ['p', 3]), ('Li', ['M', 7])]

 

List中混合字典:

對多個key值rating和name排序

>>> gameresult = [{"name":"Bob","wins":10,"losses":3,"rating":75.00},
... {"name":"David","wins":3,"loses":5,"rating":57.00}]
>>> from operator import itemgetter
>>> sorted(gameresult,key=itemgetter("rating","name"))
[{'wins': 3, 'rating': 57.0, 'name': 'David', 'loses': 5}, {'wins': 10, 'losses': 3, 'name': 'Bob', 'rating': 75.0}]

參考鏈接:
https://blog.csdn.net/bitcarmanlee/article/details/60871720
https://www.cnblogs.com/kaiz/p/6390021.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章