如何按值對字典排序

Jinku Hu 2023年1月30日 2018年8月14日
  1. 只獲取已排序的值列表
  2. 使用 operator.itemgetter 對字典排序
  3. 使用 lambda 函式作為 sorted 函式中的比較鍵來對字典排序
  4. OrderedDict 資料型別來得到跟字典資料型別相容的結果
如何按值對字典排序

Python 字典是一種無序資料型別,因此,你無法通過其鍵或值對字典進行排序。但是你可以得到用其他資料型別表示的 Python 字典排序的結果,例如可以用列表來表示字典排序的結果。

假設我們有一個如下的字典,

exampleDict = {'first': 3, 'second': 4, 'third': 2, 'fourth': 1}

只獲取已排序的值列表

sortedDict = sorted(exampleDict.values())
#Out: [1, 2, 3, 4]

使用 operator.itemgetter 對字典排序

import operator
sortedDict = sorted(exampleDict.items(), key=operator.itemgetter(1))
#Out: [('fourth', 1), ('third', 2), ('first', 3), ('second', 4)]

exampleDict.items 返回字典元素的鍵值對。key=operator.itemgetter(1) 指定比較鍵是字典的值,類似的,operator.itemgetter(0) 會指定比較鍵為字典的鍵。

使用 lambda 函式作為 sorted 函式中的比較鍵來對字典排序

你也可以使用 lambda 方程來作為比較鍵而不是用 operator.itemgetter 做鍵值。

sortedDict = sorted(exampleDict.items(), key=lambda x: x[1])
#Out: [('fourth', 1), ('third', 2), ('first', 3), ('second', 4)]

exampleDict.items() 返回字典的鍵值對列表,其元素的資料型別為元組。x 是這個元組的元素,其中 x[0] 是鍵,x[1] 值是值。 key=lambda x:x[1] 表示比較鍵是字典元素的值。

OrderedDict 資料型別來得到跟字典資料型別相容的結果

上面示例程式碼的結果是列表,而不是字典型別。如果要將結果保持為字典相容型別,那從 Python 2.7 開始引入的 OrderedDict 是一個不錯的選擇。

from collections import OrderedDict
sortedDict = OrderedDict(sorted(exampleDict.items(), key=lambda x: x[1]))
#Out: OrderedDict([('fourth', 1), ('third', 2), ('first', 3), ('second', 4)])

OrderedDict 型別是 Python 字典 dict 的一個子類,它支援字典的常見方法,也能記住元素被插入的順序。

Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

相關文章 - Python Dictionary