1. 程式人生 > 程式設計 >Python sorted對list和dict排序

Python sorted對list和dict排序

sorted語法

sorted(iterable,key=None,reverse=False)

引數說明:

- iterable -- 可迭代物件。
- key --主要是用來進行比較的元素,只有一個引數,具體的函式的引數就是取自於可迭代物件中,指定可迭代物件中的一個元素來進行排序。
- reverse -- 排序規則,reverse = True 降序 , reverse = False 升序(預設)。

返回:
- 一個新list物件

sorted對字典dict排序

①按鍵key排序

from operator import itemgetter
dict = {3: 'B',1: 'A',2: 'C'}

# 按key升序  .items()取得3個(key,value)
# lambda x: x[0]取(key,value)的key  即(3,1,2)
d1 = sorted(dict.items(),key=lambda x: x[0],reverse=False) # <class 'list'>

# 按key降序  itemgetter類似lambda
d2 = sorted(dict.items(),key=itemgetter(0),reverse=True) # <class 'list'>

# 輸出
print(d1,type(d1)) # [(1,'A'),(2,'C'),(3,'B')] <class 'list'>
print(d2,type(d2)) # [(3,'B'),(1,'A')] <class 'list'>

[(1,‘A'),‘C'),‘B')] <class ‘list'>
[(3,‘B'),‘A')] <class ‘list'>

②按值value排序

from operator import itemgetter
dict = {3: 'B',2: 'C'}

# 按value升序  .items()取得3個(key,value)
# lambda x: x[1]取(key,value)的value  即('B','A','C')
d3 = sorted(dict.items(),key=lambda x: x[1],reverse=False) # <class 'list'>

# 按value降序  itemgetter類似lambda
d4 = sorted(dict.items(),key=itemgetter(1),reverse=True) # <class 'list'>

print(d3,type(d3)) # [(1,'C')] <class 'list'>
print(d4,type(d4)) # [(2,'A')] <class 'list'>

[(1,‘C')] <class ‘list'>
[(2,‘A')] <class ‘list'>

sorted排序list

①按一種規則排序list

from operator import itemgetter
data = [('c',3,'Apple'),('d','Cat'),('a',2,'Banana')]
# 根據字母升序
print(sorted(data,reverse=False)) # <class 'list'>
# 根據數字升序
print(sorted(data,reverse=False)) # <class 'list'>
# 根據單詞升序
print(sorted(data,key=lambda x: x[2],reverse=False)) # <class 'list'>

[('a','Banana'),('c','Cat')]
[('d','Apple')]
[('c','Cat')]

②按多種規則排序list

# 先按照成績降序排序,相同成績的按照名字升序排序:
d1 = [{'name':'alice','score':38},{'name':'bob','score':18},{'name':'darl','score':28},{'name':'christ','score':28}]
l = sorted(d1,key=lambda x:(-x['score'],x['name']))
print(l)

[{'name': 'alice','score': 38},{'name': 'christ','score': 28},{'name': 'darl',{'name': 'bob','score': 18}]

sorted排序list和dict的混合

先看看我們排序的有哪些型別的資料結構

#### 二維list排序
l1 = [['Bob',95.00,'A'],['Alan',86.0,'C'],['Mandy',82.5,['Rob',86,'E']]

#### list中混合字典
l2 = [{'name':'alice','score':28}]

#### 字典中混合list
d1 = {'Li': ['M',7],'Zhang': ['E',2],'Wang': ['P',3],'Du': ['C','Ma': ['C',9],'Zhe': ['H',7]}

#### 對字典中的多維list進行排序
d2 = {
  'Apple': [['44',88],['11',33],['22',88]],'Banana': [['55',43],68],['44',22]],'Orange':[['22',22],['55',41],42],['33',22]]
}

二維list排序

from operator import itemgetter
l1 = [['Bob','E']]
# 按先按成績號升序,再按成績數值升序
print(sorted(l1,key=itemgetter(2,1),reverse=False))
# 按先按成績號升序,再按成績數值降序序
print(sorted(l1,key=lambda x:(x[2],-x[1]),reverse=False))

[[‘Mandy',‘A'],[‘Bob',95.0,[‘Alan',‘C'],[‘Rob',‘E']]
[[‘Bob',[‘Mandy',‘E']]

2. list中混合字典

from operator import itemgetter
# 先按照成績降序排序,相同成績的按照名字升序排序:
l2 = [{'name':'alice','score':28}]
print(sorted(l2,x['name'])))
print(sorted(l2,key=itemgetter('score','name')))

[{‘name': ‘alice',‘score': 38},{‘name': ‘christ',‘score': 28},{‘name': ‘darl',{‘name': ‘bob',‘score': 18}]
[{‘name': ‘bob',‘score': 18},{‘name': ‘alice',‘score': 38}]

3. 字典中混合list

d1 = {'Li': ['M',7]}
# sort返回的是list,如果需要轉為dict,再sorted前面套一個dict()就可以了
print(sorted(d1.items(),key=lambda x:(x[1][1],-ord(x[1][0]) ))) # 對字元比較需要ord。如果是'123'字串數字可以使用int。
# print(sorted(d1.items(),-ord(x[1][0]) )))

[(‘Zhang',[‘E',2]),(‘Du',[‘C',(‘Wang',[‘P',3]),(‘Li',[‘M',7]),(‘Zhe',[‘H',(‘Ma',9])]

4. 對字典中的多維list進行排序

d2 = {
  'Apple': [['44',22]]
}
for key,value in d2.items():
  d2[key] = sorted(value,key=lambda x:(x[1],-int(x[0]))) # 按list第二列升序,相同則按第一列降序,參考二維list排序
print(d2)

{‘Apple': [[‘11',[‘44',[‘22',‘Banana': [[‘44',[‘55',[‘11',68]],‘Orange': [[‘33',[‘52',42]]}

到此這篇關於Python sorted對list和dict排序的文章就介紹到這了,更多相關Python sorted對list和dict排序內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!