9.5 字典類型
(dict)是 Python 中最重要的數據結構之一,用于存儲“鍵—值”(key–value)對應關系。它是一種可變的映射類型,鍵必須唯一且可哈希;從 Python 3.7 起(語言規范保證),字典保留插入順序,這使得許多操作更加可預測。字典可高效實現查找、計數、配置管理等任務。
與列表不同,字典通過鍵(key)而不是索引來訪問數據。
9.5.1 字典的創建
字典可通過花括號 {} 、構造函數 、以及等多種方法創建。
empty = {}? 鍵(key)必須是可哈希(hashable)的對象,通常是不可變類型(如字符串、數值、元組等)。注意:元組只有當其所有元素也都是可哈希時才可作為鍵。frozenset 也是可哈希的集合類型,可作為鍵。
? 值(value)可以是任意類型,甚至包含列表、字典或函數等可變對象。
9.5.2 字典的常用操作與方法
字典可實現鍵值訪問、更新、刪除、遍歷與合并等多種,還提供豐富的用于高效管理數據。
(1)訪問與修改
使用鍵名訪問對應的值,若鍵不存在,.get() 可避免拋出 KeyError。
print(student) # {'name': '小艾', 'score': 98, 'class': 'A1'}(2)刪除操作
Python 提供多種方式刪除字典元素(需注意這些方法的返回值與副作用)。
print(data) # {}說明:.pop() 可指定默認值避免 KeyError,如 data.pop("x", None)。
(3)成員判斷與長度
print(len(person)) # 字典包含的鍵值對數量(4)遍歷
通過 .keys()、.values()、.items() 可分別遍歷鍵、值或鍵值對。
print(f"{k} -> {v}")說明:.items() 返回的元素是 (鍵, 值) 形式的元組,可在循環中直接拆包。
(5)合并與更新
使用 .update() 原地合并兩個字典。從 Python 3.9 起,也可用 | 運算符返回新字典。若鍵沖突,后者會覆蓋前者的值。
print(merged) # {'lr': 0.001, 'batch': 64, 'epochs': 10, 'device': 'cuda'}(6)安全插入:setdefault()
當鍵不存在時 .setdefault() 方法自動添加默認值,并返回該鍵對應的值(存在則直接返回現有值)。適合在分組統計中使用。
print(scores) # {'小艾': [95, 88], '小包': [90]}說明:相比手動判斷是否存在鍵,.setdefault() 更簡潔高效。但當默認值是可變對象時要注意共享引用問題。
(7)拷貝
字典的賦值只是復制引用,若要復制內容,可使用淺拷貝或深拷貝。
print("原字典未變:", a) # {'x': 1, 'y': [2, 3, 4]}說明:淺拷貝只復制外層對象,深拷貝會遞歸復制所有內部元素。
當字典中包含可變對象(如列表或嵌套字典)時,應使用 deepcopy() 以避免相互影響。
(8)排序與解包
字典本身不可直接“按序”重排,但可通過 等函數獲取排序后的視圖。
print(extended) # {'a': 1, 'b': 2}說明:sorted() 對字典的默認行為是對鍵排序;若按值排序可用 sorted(d.items(), key=lambda x: x[1])。
解包 {**a, **b} 常用于合并配置或參數表,后者會覆蓋前者同名鍵。
(9)統計與計數
結合 .get() 方法可以手動高效統計頻次。
# {'AI': 3, 'Python': 1, 'Code': 1}說明:在生產環境中也可考慮使用 .Counter。
9.5.3 字典綜合示例與應用
例 9.5.1:通訊錄管理器
字典非常適合存儲“鍵值一一對應”的信息,如姓名與電話號碼的映射。
print("更新后的通訊錄:", contacts)說明:字典在查找操作上具有極高效率,非常適合構建通訊錄、配置表、索引映射等結構。
例 9.5.2:商品庫存統計系統
通過字典可輕松管理商品與庫存數量的映射關系,并支持動態更新與匯總。
print(f"{item}:{count} 個")說明:該示例展示了字典在動態數據管理中的典型應用,如庫存管理、銷售記錄或資源計數。在實際開發中,這類字典常與文件或數據庫交互,用于實時同步業務數據。
9.6 組合數據的嵌套與綜合應用
嵌套與組合是數據結構的高階應用。通過合理使用列表、元組、集合與字典,可以構建復雜的數據模型,并結合函數或類實現更高層次的抽象能力。
例 9.6.1:學生成績管理系統
一個學生可以有多門課程成績,可用字典與列表嵌套表示。
print(f"{name} 的平均成績:{average(scores):.1f}")輸出:
鞠子舟 的平均成績:92.7此示例結合了字典(鍵值映射)、列表(序列存儲)與函數調用(結構化計算),展示了嵌套數據在實際數據管理中的常見用法。
例 9.6.2:AI 模型參數配置表
在人工智能開發中,模型配置文件通常以嵌套字典形式存儲,便于統一管理不同模塊參數。
print("訓練輪次:", config["training"]["epochs"]) 輸出:
訓練輪次: 10嵌套字典是一種常見的數據描述結構,可輕松轉換為 文件,用于深度學習模型配置、超參數管理或日志記錄。
例 9.6.3:模型訓練日志分析器
在機器學習實驗中,我們常使用字典與列表來記錄訓練過程中的多組指標(如損失 loss、準確率 accuracy)。
通過組合數據結構,可以輕松統計與可視化模型性能趨勢。
analyze_logs(logs)輸出:
最高準確率:86.00%說明:此示例結合了列表(順序存儲多輪訓練記錄) 與 字典(保存每輪的指標),展示了如何組織結構化數據以便分析。
在實際 AI 項目中,可擴展為讀取 JSON 訓練日志、繪制學習曲線或自動記錄實驗結果。
小結
本次課系統學習了 Python 的字典(dict)類型,掌握了字典的創建方法、訪問與修改技巧、常用方法,并通過綜合示例了解了字典在通訊錄管理、庫存系統、模型配置與日志分析等應用場景中的強大作用。
在下一課中,我們將學習文件操作(File I/O),了解如何將這些內存中的數據包括列表、字典等保存到外部文件(如 .txt、.csv、.json),從而實現數據的持久化存儲與跨程序共享。
![]()
“點贊有美意,贊賞是鼓勵”
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.