常規(guī)場景
如某班的成績以字典的形式存儲為:{'Airing': 100, 'Penny': 70, 'Bili': 50}
,現(xiàn)根據(jù)其成績的高低,對學(xué)生進行排名。
常規(guī)解法:使用zip將字典轉(zhuǎn)成元組
sorted
是一個內(nèi)置的排序函數(shù),可對列表進行排序。如:
sorted([3, 4, 66, 6]) # 返回 [3, 4, 6, 66]
那么如何對字典進行排序呢?
以下是操作流程:
- 利用
zip
將字典轉(zhuǎn)化成元組 - 使用
sorted
函數(shù)進行排序
我們還是以場景中的案例為例:
d = {'Airing': 100, 'Penny': 70, 'Bili': 50}
# 如果直接對字典進行排序,會默認(rèn)按照鍵進行排序
sorted(d) # => ['Airing', 'Bili', 'Penny']
# 所以將字典轉(zhuǎn)成元組的列表處理
# 元組值前鍵后,會優(yōu)先按照值排序
# 即轉(zhuǎn)成 => [(100, 'Airing'), (70, 'Penny'), (50, 'Bili')]
# 1. 利用`zip`將字典轉(zhuǎn)化成元組
f = zip(d.values(), d.keys()) # => [(100, 'Airing'), (70, 'Penny'), (50, 'Bili')]
# 注:如果字典的項很多的話,建議使用其迭代版本(Python2),可以對內(nèi)存進行優(yōu)化
f = zip(d.itervalues(), d.iterkeys()) # 結(jié)果相同
# 2. 使用`sorted`函數(shù)進行排序
sorted(f) # 成績由小到大 => [(50, 'Bili'), (70, 'Penny'), (100, 'Airing')]
使用sorted
函數(shù)的 key 參數(shù)
那么 Python 中有沒有更加方便的解決方案呢?按照套路來說,是有的。那就是使用sorted
函數(shù)的 key 參數(shù)。
d = {'Airing': 100, 'Penny': 70, 'Bili': 50}
d.items() # => [('Airing', 100), ('Penny', 70), ('Bili', 50)]
# 此時鍵在前,值在后,沒法直接使用 sorted 函數(shù)
# 就需要使用 sorted 函數(shù)的 key 參數(shù)
sorted(d.items(), key=lambda x : x[1]) # 規(guī)定按照第1項(0開始)進行排序
# 成績由小到大 => [(50, 'Bili'), (70, 'Penny'), (100, 'Airing')]