1. 程式人生 > >Python 字典 列表 巢狀 複雜排序大全

Python 字典 列表 巢狀 複雜排序大全

https://blog.csdn.net/ray_up/article/details/42084863

 

一: 字典排序

解析: 使用sorted 方法, 排序後的結果為一個元組. 可以字串排序(那數字肯定更沒問題了!)   

1:  按照鍵值(value)排序

a = {'a': 'China', 'c': 'USA', 'b': 'Russia', 'd': 'Canada'}
b = sorted(a.items(), key=lambda x: x[1], reverse=True)
結果:
[('c', 'USA'), ('b', 'Russia'), ('a', 'China'), ('d', 'Canada')]
2: 按照鍵名(key)排序
a = {'a': 'China', 'c': 'USA', 'b': 'Russia', 'd': 'Canada'}
b = sorted(a.items(), key=lambda x: x[0], reverse=True)
結果:
[('d', 'Canada'), ('c', 'USA'), ('b', 'Russia'), ('a', 'China')]
3: 巢狀字典, 按照字典鍵名(key)排序
a = {'a': {'b': 'China'}, 'c': {'d': 'USA'}, 'b': {'c': 'Russia'}, 'd': {'a': 'Canada'}}
b = sorted(a.items(), key=lambda x: x[1], reverse=True)
結果:
[('c', {'d': 'USA'}), ('b', {'c': 'Russia'}), ('a', {'b': 'China'}), ('d', {'a': 'Canada'})]
4: 巢狀列表, 針對列表第一個元素排序( 其實直接寫 x: x[1] 就是按照第一個值排序. )
a = {'a': [1, 3], 'c': [3, 4], 'b': [0, 2], 'd': [2, 1]}
b = sorted(a.items(), key=lambda x: x[1][0], reverse=True)
結果:
[('c', [3, 4]), ('d', [2, 1]), ('a', [1, 3]), ('b', [0, 2])]
4-2: 巢狀列表, 按照列表其他元素排序  只需要修改列表對應的下標
a = {'a': [1, 3], 'c': [3, 4], 'b': [0, 2], 'd': [2, 1]}
b = sorted(a.items(), key=lambda x: x[1][1], reverse=True)
結果:
[('c', [3, 4]), ('a', [1, 3]), ('b', [0, 2]), ('d', [2, 1])]
總結:  此處使用lambda方法, x: x[1][1] 就可以看做是在訪問字典的值, 想要按照哪個數值排序, 用相應的座標對應即可, 但當字典過於複雜後, 應該選擇用元組儲存, 簡化排序過程. 

 

===========================列表排序========================
二: 列表排序

1: 按照字母排序

a = ['USA', 'China', 'Canada', 'Russia']
a.sort(reverse=True)
結果:
['USA', 'Russia', 'China', 'Canada']
2; 巢狀列表的排序, 按照子列表的其他值排序雷系, 修改x[0] 這裡的下標即可

a = [['USA', 'b'], ['China', 'c'], ['Canada', 'd'], ['Russia', 'a']]
a.sort(key=lambda x: x[0], reverse=True)
結果:
[['USA', 'b'], ['Russia', 'a'], ['China', 'c'], ['Canada', 'd']]
3: 巢狀字典, 按照字典值(value) 排序
a = [{'letter': 'b'}, {'letter': 'c'}, {'letter': 'd'}, {'letter': 'a'}]
a.sort(key=lambda x: x['letter'], reverse=True)
結果:
[{'letter': 'd'}, {'letter': 'c'}, {'letter': 'b'}, {'letter': 'a'}]
當字典值也是字典時, 這時候會優先按照鍵名排序, 再按照鍵值排序. 例子如下

a = [{'letter': {'a': 'b'}}, {'letter': {'a': 'c'}}, {'letter': {'a': 'd'}}, {'letter': {'a': 'a'}}]
a.sort(key=lambda x: x['letter'], reverse=True)
結果:
[{'letter': {'a': 'd'}}, {'letter': {'a': 'c'}}, {'letter': {'a': 'b'}}, {'letter': {'a': 'a'}}]

a = [{'letter': {'a': 'b'}}, {'letter': {'b': 'c'}}, {'letter': {'c': 'd'}}, {'letter': {'d': 'a'}}]
a.sort(key=lambda x: x['letter'], reverse=True)
結果:
[{'letter': {'d': 'a'}}, {'letter': {'c': 'd'}}, {'letter': {'b': 'c'}}, {'letter': {'a': 'b'}}]

總結: 
常規查詢均能夠只用lambda實現, 另外還有其他方法, 比如使用operator包中的方法.  本處沒有比較各個方法的效率, python 為2.7.8版本

總的來說, 上面的例子已經很詳盡, 基本覆蓋常見情況, 如有沒有羅列, 請指正, 一起探討! 


---------------------
作者:rayimpr
來源:CSDN
原文:https://blog.csdn.net/ray_up/article/details/42084863
版權宣告:本文為博主原創文章,轉載請附上博文連結!