Python排序总结:列表、字典、包含字典的列表、包含元组的列表排序

浪尽此生 提交于 2019-12-05 02:28:21

1、列表排序

    两种方法

    sorted(list):返回一个对象,原来的list不变,生成一个新的排好的list对象;

    list.sort():不会返回对象,改变原有list。

    排序实例:

L = [2, 4, 1, 5, 9]

    1.1 升序

>>> sorted(L)
[1, 2, 4, 5, 9]

>>> L.sort()
>>> print L
[1, 2, 4, 5, 9]

    1.2 降序

    reverse关键字:排序规则。 reverse = True 或者 reverse = False,有默认值,默认为升序排列(False)

>>> sorted(L,reverse=True)
[9, 5, 4, 2, 1]

>>> L.sort(reverse=True)
>>> print L
[9, 5, 4, 2, 1]

 

2、字典排序

    字典的特点是无序,可以按照键(key)或者值(value)对其进行排序,但是返回的结果肯定不能是字典。

    排序实例:

D = {'jack': 23, 'rose': 21, 'flank': 22}

    2.1 升序

    2.1.1 lambda表达式

>>> sorted(D.items(), key=lambda d:d[1])  # 值(value)排序
[('rose', 21), ('flank', 22), ('jack', 23)]

>>> sorted(D.items(), key=lambda d:d[0])  # 按键(key)排序按
[('flank', 22), ('jack', 23), ('rose', 21)]

sorted(iterable[, cmp[, key[, reverse]]])

    iterable:是可迭代类型类型;

    cmp:用于比较的函数,比较什么由key决定,有默认值,迭代集合中的一项;

    key:用列表元素的某个属性和函数进行作为关键字,有默认值,迭代集合中的一项;

    2.1.2 operator模块

>>> import operator
>>> print sorted(D.items(), key=operator.itemgetter(1))   # 值(value)排序 
[('rose', 21), ('jack', 23), ('flank', '23')]

>>> print sorted(D.items(), key=operator.itemgetter(0))   # 按键(key)排序按
[('flank', '23'), ('jack', 23), ('rose', 21)]

 

    2.2 降序

    2.2.1 lambda表达式

    和list一样,加入reverse参数即可

>>> sorted(D.items(), key=lambda d:d[0], reverse=True)  # 按键(key)排序按
[('rose', 21), ('jack', 23), ('flank', 22)]

>>> sorted(D.items(), key=lambda d:d[1], reverse=True)  # 值(value)排序
[('jack', 23), ('flank', 22), ('rose', 21)]

 

    2.2.2 operator模块

>>> import operator
>>> print sorted(D.items(), key=operator.itemgetter(0), reverse=True)    # 按键(key)排序按
[('rose', 21), ('jack', 23), ('flank', '23')]

>>> print sorted(D.items(), key=operator.itemgetter(1), reverse=True)   # 值(value)排序
[('flank', '23'), ('jack', 23), ('rose', 21)]

 

3、包含字典的列表排序

    指定list中字典的某个键值进行排序

    排序实例:

D = [{'name': 'jack', 'age': 23}, {'name': 'rose', 'age': 21}, {'name': 'flank','age': 22}]

    3.1 升序

      3.1.1 lambda表达式

>>> import operator
>>> sorted(D, key=lambda x : x['age'])
[{'age': 21, 'name': 'rose'}, {'age': 22, 'name': 'flank'}, {'age': 23, 'name': 'jack'}]

     3.1.2 operator模块

>>> import operator
>>> sorted(D, key=operator.itemgetter('name'))   # 根据'name'排序
[{'age': 22, 'name': 'flank'}, {'age': 23, 'name': 'jack'}, {'age': 21, 'name': 'rose'}]

>>> sorted(D, key=operator.itemgetter('age'))    # 根据'age'排序
[{'age': 21, 'name': 'rose'}, {'age': 22, 'name': 'flank'}, {'age': 23, 'name': 'jack'}]

    3.2 降序

    一样,加入reverse参数即可

    3.2.1 lambda表达式

>>> import operator
>>> sorted(D, key=lambda x : x['age'], reverse=True)
[{'age': 23, 'name': 'jack'}, {'age': 22, 'name': 'flank'}, {'age': 21, 'name': 'rose'}]

 

    3.2.2 operator模块

>>> import operator
>>> sorted(D, key=operator.itemgetter('name'), reverse=True)  # 根据'name'排序
[{'age': 21, 'name': 'rose'}, {'age': 23, 'name': 'jack'}, {'age': 22, 'name': 'flank'}]

>>> sorted(D, key=operator.itemgetter('age'), reverse=True)   # 根据'age'排序
[{'age': 23, 'name': 'jack'}, {'age': 22, 'name': 'flank'}, {'age': 21, 'name': 'rose'}]

4、包含元组的列表排序

    对列表中的元组排

# 升序, 降序加reverse=True
L.sort(key=lambda x:x[0])          # 根据第1个值排序
L.sort(key=operator.itemgetter(0)) # 根据第1个值排序
[('a', 4), ('b', 1), ('c', 2)]

L.sort(key=lambda x:x[1])          # 根据第2个值排序
L.sort(key=operator.itemgetter(1)) # 根据第2个值排序
[('b', 1), ('c', 2), ('a', 4)]


 

    

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!