1. はじめに
Python 因其簡潔且彈性的語法,受到許多開發者的喜愛。特別是「字典(dict)」是一種用來管理鍵值對的便利資料結構,能有效提升資料整理與存取的效率。然而,在撰寫程式的過程中,我們常會遇到「希望將字典依照特定順序排序」的需求。 例如,如果想要排序學生的成績單或商品的價格表,就需要依照鍵或值的順序來整理資料。在這種情況下,Python 的「字典排序」功能就派上用場了。 本文將詳細介紹如何使用 Python 根據鍵或值來排序字典。從基礎用法到進階範例,並搭配實際程式碼說明,讓初學者到中階使用者都能輕鬆理解,歡迎閱讀到最後!Ad
2. 辞書のソート方法
在 Python 中,排序字典主要使用sorted() 函數。以下將依照鍵與值的不同排序方式,逐步進行說明。2.1 辞書のキーでソートする方法
若要依照鍵進行排序,可以使用以下的程式碼:sample_dict = {'apple': 3, 'banana': 1, 'cherry': 2}
sorted_by_key = dict(sorted(sample_dict.items(), key=lambda x: x[0]))
print(sorted_by_key)結果:{'apple': 3, 'banana': 1, 'cherry': 2}程式碼說明:
sample_dict.items()會以鍵值對的形式取得字典的項目。sorted()函數根據鍵(x[0])進行排序。- 最後使用
dict()將排序後的項目重新組成字典。
2.2 辞書の値でソートする方法
若要依據值進行排序,可以使用以下程式碼:sample_dict = {'apple': 3, 'banana': 1, 'cherry': 2}
sorted_by_value = dict(sorted(sample_dict.items(), key=lambda x: x[1]))
print(sorted_by_value)結果:{'banana': 1, 'cherry': 2, 'apple': 3}程式碼說明:
- 使用
key=lambda x: x[1]來指定排序依據為「值」。 - 會依照數值由小到大排序,適合用於排行榜或數值比較等情境。
2.3 operatorモジュールを使用したソート
若希望更有效率地排序,可使用 Python 的 operator 模組:from operator import itemgetter
sample_dict = {'apple': 3, 'banana': 1, 'cherry': 2}
sorted_by_value = dict(sorted(sample_dict.items(), key=itemgetter(1)))
print(sorted_by_value)結果:{'banana': 1, 'cherry': 2, 'apple': 3}程式碼說明:
itemgetter(1)表示取得索引為 1 的元素(即值)。- 與
lambda相比,效能稍好,適合處理大量資料。

3. ソート結果の再構築
對字典排序後,通常會得到一個由元組組成的列表。以下說明如何將其重新轉換為字典格式。3.1 ソート済み辞書の作成
sorted_items = [('banana', 1), ('cherry', 2), ('apple', 3)]
reconstructed_dict = dict(sorted_items)
print(reconstructed_dict)結果:{'banana': 1, 'cherry': 2, 'apple': 3}只要將元組列表傳入 dict() 函數,就能輕鬆地重新建立字典格式。3.2 OrderedDictの活用
從 Python 3.7 開始,一般的字典也會保留插入順序。不過,若你希望更明確地控制順序,可以使用 OrderedDict。from collections import OrderedDict
sample_dict = {'apple': 3, 'banana': 1, 'cherry': 2}
sorted_by_value = OrderedDict(sorted(sample_dict.items(), key=lambda x: x[1]))
print(sorted_by_value)結果:OrderedDict([('banana', 1), ('cherry', 2), ('apple', 3)])當你需要處理順序很重要的資料時,這種方法會特別有幫助。Ad
4. 応用例
接下來介紹一些關於 Python 字典排序的進階應用,包含如何排序字典列表,以及使用多條件排序的方法。4.1 辞書のリストを特定のキーでソートする
在 Python 中,可以依據特定鍵來排序「字典的列表」。這在處理資料庫查詢結果或 JSON 資料時非常實用。 範例 1: 依照學生的年齡排序students = [
{'name': 'Alice', 'age': 25},
{'name': 'Bob', 'age': 22},
{'name': 'Charlie', 'age': 23}
]
sorted_students = sorted(students, key=lambda x: x['age'])
print(sorted_students)結果:[{'name': 'Bob', 'age': 22}, {'name': 'Charlie', 'age': 23}, {'name': 'Alice', 'age': 25}]程式碼說明:
- 透過
key=lambda x: x['age'],以每位學生的年齡為排序依據。 sorted()會回傳新的列表,原始資料不會被改動。
4.2 複数のキーでソートする
若要根據多個條件排序,可以使用元組作為排序依據。 範例 2: 依照姓名與年齡排序students = [
{'name': 'Alice', 'age': 25},
{'name': 'Bob', 'age': 22},
{'name': 'Charlie', 'age': 23},
{'name': 'Alice', 'age': 20}
]
sorted_students = sorted(students, key=lambda x: (x['name'], x['age']))
print(sorted_students)結果:[{'name': 'Alice', 'age': 20}, {'name': 'Alice', 'age': 25}, {'name': 'Bob', 'age': 22}, {'name': 'Charlie', 'age': 23}]程式碼說明:
key=lambda x: (x['name'], x['age'])會先根據姓名排序,再根據年齡排序。- 使用元組作為排序鍵,可輕鬆設定排序優先順序。
4.3 昇順・降順の指定
若要進行降序排序,只需在sorted() 函數中加上 reverse=True。 範例 3: 依年齡進行降序排序students = [
{'name': 'Alice', 'age': 25},
{'name': 'Bob', 'age': 22},
{'name': 'Charlie', 'age': 23}
]
sorted_students = sorted(students, key=lambda x: x['age'], reverse=True)
print(sorted_students)結果:[{'name': 'Alice', 'age': 25}, {'name': 'Charlie', 'age': 23}, {'name': 'Bob', 'age': 22}]4.4 ネストされた辞書のソート
即使字典內部還包含字典(巢狀結構),也能進行排序。 範例 4: 依照內部資料的 points 欄位排序data = {
'team1': {'points': 50, 'rank': 2},
'team2': {'points': 40, 'rank': 3},
'team3': {'points': 60, 'rank': 1}
}
sorted_data = dict(sorted(data.items(), key=lambda x: x[1]['points']))
print(sorted_data)結果:{'team2': {'points': 40, 'rank': 3}, 'team1': {'points': 50, 'rank': 2}, 'team3': {'points': 60, 'rank': 1}}程式碼說明:
x[1]['points']用來從內層字典中取得 points 值作為排序依據。- 即使面對巢狀結構的資料,也能透過指定鍵來輕鬆排序。

5. 注意点とベストプラクティス
在對字典進行排序時,請注意以下幾個重點:5.1 大規模データのパフォーマンス
由於字典排序會涉及列表操作,當處理大型資料集時,執行效率可能會成為瓶頸。 優化建議:- 使用
operator.itemgetter提升排序效率。 - 對排序結果進行快取,以避免重複處理相同資料。
5.2 Pythonのバージョンによる違い
從 Python 3.7 起,一般字典會自動保留插入順序;但在舊版本中,順序則不保證一致。 因應方式:- 在較舊版本中,建議使用
OrderedDict來維持順序。
Ad
6. まとめ
本文介紹了多種在 Python 中對字典(dict)進行排序的方法。內容涵蓋了基本的鍵與值排序技巧,也包括進階的應用情境,如排序字典列表、多重條件排序等。重點回顧:
- 基本排序方法:
- 使用
sorted()函數根據鍵或值進行排序。 - 透過
lambda函數或operator.itemgetter提高效率。
- 進階應用:
- 對字典列表進行排序,可根據單一或多個鍵。
- 巢狀字典也可依內部鍵排序。
- 注意事項:
- 處理大量資料時需考量效能問題。
- 了解不同 Python 版本的排序行為,必要時使用
OrderedDict。
Ad
7. FAQ
Q1: 辞書を直接ソートすることはできますか?
A1: 雖然 Python 字典會保留順序,但無法直接排序。需使用sorted() 函數,依鍵或值排序後再建立新的字典。Q2: OrderedDictと通常の辞書の違いは何ですか?
A2: 在 Python 3.7 之後,一般字典也會保留插入順序;但 OrderedDict 還支援順序變更與項目移動等進階功能。在 Python 3.6 以前的版本中,若需保留順序,OrderedDict 是必要的。Q3: 辞書のキーや値が複雑なデータ型の場合、どのようにソートすればよいですか?
A3: 可以透過自訂排序鍵來解決。例如想依據字串長度或時間格式排序,可在key 引數中使用 lambda 函數來指定條件。 範例:data = {'a': [1, 2], 'b': [3], 'c': [1, 2, 3]}
sorted_data = dict(sorted(data.items(), key=lambda x: len(x[1])))
print(sorted_data)結果:{'b': [3], 'a': [1, 2], 'c': [1, 2, 3]}Q4: ソートの結果を逆順にする方法は?
A4: 在sorted() 函數中加入 reverse=True 參數,即可進行降序排序。 範例:data = {'apple': 3, 'banana': 1, 'cherry': 2}
sorted_data = dict(sorted(data.items(), key=lambda x: x[1], reverse=True))
print(sorted_data)結果:{'apple': 3, 'cherry': 2, 'banana': 1}Q5: ソート結果を元に戻すにはどうすればよいですか?
A5: 因為字典本身不保留原始順序,若要還原排序前的狀態,需搭配索引或列表來管理原始順序。或使用OrderedDict 來保留與操作順序。 範例:from collections import OrderedDict
data = {'apple': 3, 'banana': 1, 'cherry': 2}
ordered_data = OrderedDict(data)
print(ordered_data) 


