如何在 Python 中按值對字典進行排序
了解如何按 Python 字典的值對字典進行排序。探索使用排序()、自訂鍵 lambda 進行排序,以及建立有序字典結構。
概述
雖然字典主要是為使用唯一鍵進行快速查找操作而構建的,但您通常需要根據字典項的值對它們進行排序。例如,按考試成績對學生進行排序,從最便宜到最貴列出產品,或按頻率對字數進行排序。
在 Python 中,您無法直接對字典進行就地排序,因為標準字典結構不支援列表等排序方法。相反,标准方法是使用“.items()”方法将字典的项目作为元组检索,使用内置的“sorted()”函数和自定义排序键对这些元组进行排序,然后从排序的项目重建字典。
排序鍵通常是一個 lambda 函數,它會傳回元組的第二個元素(字典值):「key=lambda item: item[1]」。自Python 3.7+ 起,標準字典保留插入順序。使用 dict() 建構函數將已排序的元組列表重新轉換回字典,傳回一個乾淨的、已排序的字典,可供迭代。
程式碼和執行輸出
此腳本示範使用 lambda 函數按值按升序和降序對測驗分數字典進行排序。
sort_dict_values.py
在編輯器中嘗試scores = {"Alice": 88, "Bob": 75, "Charlie": 95, "David": 82}
print("Original dictionary:", scores)
# 1. Sort by values (ascending order)
sorted_ascending = dict(sorted(scores.items(), key=lambda item: item[1]))
print("Sorted ascending:", sorted_ascending)
# 2. Sort by values (descending order)
sorted_descending = dict(sorted(scores.items(), key=lambda item: item[1], reverse=True))
print("Sorted descending:", sorted_descending)
# 3. sorting by keys for comparison
sorted_keys = dict(sorted(scores.items(), key=lambda item: item[0]))
print("Sorted by keys:", sorted_keys)端子輸出
Original dictionary: {'Alice': 88, 'Bob': 75, 'Charlie': 95, 'David': 82}
Sorted ascending: {'Bob': 75, 'David': 82, 'Alice': 88, 'Charlie': 95}
Sorted descending: {'Charlie': 95, 'Alice': 88, 'David': 82, 'Bob': 75}
Sorted by keys: {'Alice': 88, 'Bob': 75, 'Charlie': 95, 'David': 82}逐步實施
- 呼叫 my_dict.items() 以元組列表形式檢索鍵值對。
- 將字典項目傳遞給sorted()函數。
- 指定 key=lambda item: item[1] 指示sorted() 函數依據值(每個元組的第二個元素)進行排序。
- 傳遞reverse=True 作為選用參數以降序對項目進行排序。
- 透過將排序的元組列表傳遞給 dict() 建構函數來重建排序的字典。
常見問題解答
key=lambda item: item[1] 是什麼意思?
Sorted() 函數將項目序列的每個元素((key, value) 的元組)傳遞給 lambda 函數。 item[1] 擷取值分量,告訴 Python 依值對元組進行排序。
字典排序會影響其鍵查找速度嗎?
不會,鍵查找的平均時間複雜度仍然是 O(1),因為排序僅更改迭代順序,而不更改底層哈希表結構。
相關主題
推薦的 Python 資源
透過相關的互動式教學、備忘單和程式碼比較來擴展您的知識。