python-字典列表嵌套的排序

排序函数

使用排序有两个可用方法,分别是sort()和sorted()

  sort():内置方法,会改变原来列表的的排序、只适用于列表排序、所以效率高

  sorted():全局,可迭代任意对象(字符串、元祖、列表、字典等)

sort()示例

简单的列表排序

L = [4,5,2,6,7,0,1,8] L.sort() print(L)  运行结果: [0, 1, 2, 4, 5, 6, 7, 8]

列表嵌套列表排序

user = [['Jone','183','22'],['Lily','165','60'],['Jack','179','59']] user.sort(key=lambda user:user[2]) print(user)  运行结果: [['Jone', '183', '22'], ['Jack', '179', '59'], ['Lily', '165', '60']]

sorted()示例

字符串

A = 'Python' print(sorted(A,reverse=False)) print(sorted(A,reverse=True))  运行结果: ['P', 'h', 'n', 'o', 't', 'y'] ['y', 't', 'o', 'n', 'h', 'P']

元祖

B = (5,6,2,3,1,9,7) print(sorted(B,reverse=False)) print(sorted(B,reverse=True))  运行结果: [1, 2, 3, 5, 6, 7, 9] [9, 7, 6, 5, 3, 2, 1]

列表

C = [4,2,5,9,6,0] print(sorted(C,reverse=False)) print(sorted(C,reverse=True))  运行结果: [0, 2, 4, 5, 6, 9] [9, 6, 5, 4, 2, 0]

字典
按key降序排

D = {a:2,b:8,c:6} D_K = sorted(D.items(),key=lambda x:x[0],reverse=True) print(D_K)  运行结果: [('c', '6'), ('b', '8'), ('a', '2')]

按value降序排

D = {a:2,b:8,c:6} D_K = sorted(D.items(),key=lambda x:x[1],reverse=True) print(D_K)  运行结果: [('b', '8'), ('c', '6'), ('a', '2')]

几种常见的嵌套排序

1.列表中嵌套字典,根据字典value值倒序排
  1.1 使用lambda方式,sorted排序函数中传入参数key,key的值为匿名函数lambda的返回值,匿名函数中的第一个x为参数,x[1]为函数表达式,1指的是取a的子元素的第二个值。

D = [{name:Jack,age:18},{name:Lily,age:28}] ds = sorted(D,key=lambda x:x['age'],reverse=True) print(ds)  运行结果: [{'name': 'Lily', 'age': 28}, {'name': 'Jack', 'age': 18}]

  1.2 使用operator方式

import operator
D = [{name:Jack,age:18},{name:Lily,age:28}] D.sort(key=operator.itemgetter('age'),reverse=True) print(D)  运行结果: [{'name': 'Lily', 'age': 28}, {'name': 'Jack', 'age': 18}]

2. 列表中嵌套字典,key不同的情况下对value进行排序
  可以将列表中的字典先放入到有一个字典中,对整个字典进行排序,在排序完成后,再转换成

from operator import itemgetter dic_list = [{min:89},{fei:90},{hao:84},{jhon:98}] dic_dict = {key:value for x in dic_list for key,value in x.items()} print(dic_dict) dict_list = sorted(dic_dict.items(),key=itemgetter(1)) print(dict_list) dic_fin = [{x[0]:x[1] for x in dict_list}] print(dic_fin)  运行结果: {'min': 89, 'fei': 90, 'hao': 84, 'jhon': 98} [('hao', 84), ('min', 89), ('fei', 90), ('jhon', 98)] [{'hao': 84, 'min': 89, 'fei': 90, 'jhon': 98}]

3. 字典嵌套字典的排序

D = {10:{aa:1,bb:2},11:{aa:2,bb:0},12:{aa:0,bb:3}} ds = sorted(D.items(),key=lambda x:x[1]['bb']) print(ds)  运行结果: [(11, {'aa': 2, 'bb': 0}), (10, {'aa': 1, 'bb': 2}), (12, {'aa': 0, 'bb': 3})]