如何在 Python 中按鍵對字典排序

Azaz Farooq 2023年10月10日
  1. Python 用 dict.keys() 方法對字典按鍵排序
  2. Python 用 dict.items() 方法按鍵對字典進行排序
  3. Python 用 OrderedDict() 方法按 key 對字典進行排序
  4. Python 按反向順序對字典進行排序
  5. Python 用自定義 key 函式方法排序字典
如何在 Python 中按鍵對字典排序

Python 字典和雜湊表一樣,通過評估鍵的雜湊值來儲存條目,條目的順序是無法預測的。本文將介紹如何在 Python 中按鍵對字典進行排序。

Python 用 dict.keys() 方法對字典按鍵排序

讓我們以下面的字典為例。

dict = {"hello": 56, "at": 23, "test": 43, "this": 43}

dict.keys() 的輸出是

dict_keys(["hello", "at", "test", "this"])

我們可以從這個無序的鍵列表中建立一個新的、有序的字典。

sorted(dict.keys())

輸出:

['at', 'hello', 'test', 'this']

通過從字典中選擇每個條目,我們可以對該排序列表重複進行排序。

for key in sorted(dict.keys()):
    print(key, " :: ", dict[key])

輸出:

at  ::  23
hello  ::  56
test  ::  43
this  ::  43

Python 用 dict.items() 方法按鍵對字典進行排序

我們也可以在 Python 中用 dict.items() 方法按鍵對一個字典進行排序。

它將生成一個包含鍵值對的列表?

dict.items()

輸出:

dict_items([('hello', 56), ('at', 23), ('test', 43), ('this', 43)])

我們可以通過下面的函式生成一個排列好的列表。它將根據鍵值對字典的條目進行排序。

sorted(dict.keys())

輸出:

['at', 'hello', 'test', 'this']

現在,為了從字典中產生排序鍵值對,我們使用以下程式碼。

for elem in sorted(dict.items()):
    print(elem[0], " ::", elem[1])

輸出:

at  :: 23
hello  :: 56
test  :: 43
this  :: 43

在複雜性方面,它比前面的方法更強大。因為我們在對可迭代列表進行排序後,不需要像 dict.key() 那樣檢查鍵值。

Python 用 OrderedDict() 方法按 key 對字典進行排序

另外,我們也可以使用 collections 模組對字典元素進行鍵值排序。

import collections

d = {2: 13, 1: 9, 4: 25, 3: 0}
result = collections.OrderedDict(sorted(d.items()))
print(result)

輸出:

OrderedDict([(1, 9), (2, 13), (3, 0), (4, 25)])

Python 按反向順序對字典進行排序

之前,我們按升序對字典項進行了排序。現在我們討論一些按降序排列字典項的方法。

語法為:

sorted(iterable_sequence, reverse=True)

以下程式碼對字典項進行排序和反轉。

dict = {"hello": 56, "at": 23, "test": 43, "this": 43}
for elem in sorted(dict.items(), reverse=True):
    print(elem[0], " ::", elem[1])

引數 reverse=true 確保排序後的字典是反向的。

輸出:

this  :: 43

test  :: 43

hello  :: 56

at  :: 23

Python 用自定義 key 函式方法排序字典

該方法將通過使用 key 字串的長度對字典元素進行排序。

sorted(iterable_sequence, key=Function)

返回字串大小的 lambda 函式被賦予 key 引數。

listofTuples = sorted(dict.items() ,  key=lambda x: len (x[0] ) )
for elem in listofTuples :
    print(elem[0] , " ::" , elem[1] )

輸出:

at  :: 23

test  :: 43

this  :: 43

hello  :: 56

相關文章 - Python Dictionary