Python中字典(dict)和列表(list)的排序方法執行個體

來源:互聯網
上載者:User
一、對列表(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()方法

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.