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