1. 程式人生 > 其它 >python-字典列表巢狀的排序

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})]