国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python中字典(dict)和列表(list)的排序方法實例

2019-11-25 18:22:12
字體:
來源:轉載
供稿:網友

一、對列表(list)進行排序

推薦的排序方式是使用內建的sort()方法,速度最快而且屬于穩定排序

復制代碼 代碼如下:

>>> a = [1,9,3,7,2,0,5]
>>> a.sort()
>>> print a
[0, 1, 2, 3, 5, 7, 9]
>>> a.sort(reverse=True)
>>> print a
[9, 7, 5, 3, 2, 1, 0]
>>> b = ['e','a','be','ad','dab','dbc']
>>> b.sort()
>>> print b
['a', 'ad', 'be', 'dab', 'dbc', 'e']

對列表的排序是遵循DSU(decorate-sort-undecorate)模式的,序列是安裝條目的順序進行比較的,對剛剛例子中的字符串來說,就是按照從左到右的順序,逐個字符進行比較,一旦得出結果就停止比較。

二、對字典(dict)進行排序

其實字典(dict)是一個無序序列,談不上排序,我們只能按照字典的鍵/值進行排序,然后讓對應值/鍵也處于同樣的順序
任何對字典的排序問題,都要最終歸結為對字典(dict)的鍵(key)或者值(value)組成的列表(list)的排序

1、按字典(dict)的鍵進行排序[1]

復制代碼 代碼如下:

def sortedDictValues(adict,reverse=False):
 keys = adict.keys()
 keys.sort(reverse=reverse)
 return [adict[key] for key in keys]

如果需要同時返回鍵和值的話,之用將最后的return語句改為:
復制代碼 代碼如下:
return [(key,adict[key]]) for key in keys]

還有一種書寫簡單的方法,就是使用內置的sorted()方法進行排序:
復制代碼 代碼如下:

>>> d = {'c':1,'e':'5','b':7}
>>> sorted(d.items())
[('b', 7), ('c', 1), ('e', '5')]

不過性能會有些許的下降,如果很苛求性能,還是使用原生對list.sort()方法比較好

2、按字典(dict)的值進行排序[2]

復制代碼 代碼如下:

def sorted_dict(container, keys, reverse):
 """返回 keys 的列表,根據container中對應的值排序"""
 aux = [ (container[k], k) for k in keys]
 aux.sort()
 if reverse: aux.reverse()
 return [k for v, k in aux]

同樣可以用sorted()方法實現同樣的功能:
復制代碼 代碼如下:
sorted(d.items(), key=lambda d:d[1], reverse=True)

三、結語

通過以上代碼的分析,大致總結處以下幾條原則:
* 對字典的排序,最終都要歸結為對字典的鍵或者值組成的列表的排序
* 對列表的排序,優先使用內置的list.sort()方法

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 德化县| 集贤县| 乌拉特后旗| 绥芬河市| 康平县| 青铜峡市| 清水县| 赤城县| 大荔县| 呼和浩特市| 星座| 垫江县| 莱阳市| 新民市| 麻城市| 搜索| 志丹县| 新巴尔虎左旗| 广安市| 赤城县| 宁波市| 琼结县| 桃园县| 岢岚县| 伊金霍洛旗| 广元市| 壤塘县| 庐江县| 图木舒克市| 北宁市| 宣化县| 阿克苏市| 乌兰县| 崇明县| 林周县| 景宁| 水富县| 平罗县| 玉林市| 道孚县| 左云县|