Home > Article > Backend Development > python sorting sort() and sorted()
Application examples:
1. Output a sequence according to the alphabet
2. Sort multiple fields of records, etc.
Commonly used sorting functions:
sort()
sorted()
Comparison:
1.sorted() has a wider application range
sorted(iterable[, cmp[ , key[, reverse]]])
s.sorted([cmp[, key[, reverse]]])
Example:
>>> ; persons = [{'name':'Jon','age': 32}, {'name':'Alan','age': 50}, {'name': 'Bob', 'age':23 }]
>>> sorted(persons, key=lambda x: (x['name'], -x['age']))
[{'age': 50, 'name ': 'Alan'}, {'age': 23, 'name': 'Bob'}, {'age': 32, 'name': 'Jon'}]
sorted() can be used Any iterable object, sort() generally works on lists
>>> a = (1,2,4,2,3)
>>> a.sort( )
Traceback (most recent call last):
File "
AttributeError: 'tuple' object has no attribute 'sort'
> ;>> sorted(a)
[1, 2, 2, 3, 4]
2.sorted() returns the sorted list, and the original list remains unchanged , sort() directly modifies the original list.
sort() does not need to copy the original list, consumes less memory and is highly efficient
>>> a=['1',1,'a',3, 7,'n']
>>> sorted(a)
[1, 3, 7, '1', 'a', 'n']
>>> a
['1', 1, 'a', 3, 7, 'n']
>>> a.sort()
>>> a
[1 , 3, 7, '1', 'a', 'n']
3. For the sort() and sorted() functions, passing in the parameter key is more efficient than the parameter cmp . The function passed in by cmp is called multiple times during the entire sorting process, which is expensive; key is only processed once for each element.
>>> from timeit import Timer
>>> Timer(stmt="sorted(xs,key=lambda x:x[1])",setup="xs =range(100);xs=zip(xs,xs);").timeit(10000)
0.35391712188720703
>>> : cmp(a[1],b[1]))",setup="xs=range(100);xs=zip(xs,xs);").timeit(10000)
0.4931659698486328
4.sorted() can sort a variety of data structures
Dictionary:
Sort phonebook phone numbers by numerical size
> ;>> 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')]
Multidimensional list:
Multi-field sorting of grades and grades
>>> 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']]
Mixed list in dictionary:
>>> 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])]
Mixed dictionary in List:
Sort multiple key values rating and 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}]
> ;>>
For more python sorting sort() and sorted() related articles, please pay attention to the PHP Chinese website!