【Python】S1 基礎篇 P5 字典模塊指南

目錄

  • 字典的本質與底層實現
    • 基礎語法結構
  • 使用字典
    • 訪問字典中的值
    • 添加鍵值對
    • 修改字典中的值
    • 刪除鍵值對
    • 使用 get() 來訪問值
  • 遍歷字典
    • 遍歷所有鍵值對
    • 遍歷字典中的所有鍵
    • 遍歷字典中的所有值
  • 嵌套
    • 字典列表
    • 在字典中存儲列表

在這里插入圖片描述

字典(Dictionary)是Python中靈活且強大的內置數據結構之一。作為一個映射類型(mapping type),它以鍵值對的形式存儲數據,為復雜的真實物體場景提供了理想的建模解決方案。總結來說,字典不僅提供了高效的數據存儲方式,更是構建復雜應用架構的基礎。

字典的本質與底層實現

在 Python 中,字典是基于哈希表(Hash Table)實現的數據結構,提供 O(1)O(1)O(1) 時間復雜度的查找、插入和刪除操作。字典使用鍵(key)來索引值(value),其中鍵必須是不可變類型,而值可以是任意 Python 對象。

基礎語法結構

字典用放在花括號 {} 中的一系列鍵值對表示,每個鍵值對通過冒號 : 連接,多個鍵值對之間用逗號 , 分隔。

# 基本字典結構
person = {'name': '張三','age': 28,'city': '北京','active': True
}

字典的鍵必須是不可變類型(如字符串、數字、元組),而值可以是任意 Python 對象。這種設計確保了鍵的唯一性和哈希計算的穩定性。


使用字典

Python 字典是一種關聯數組,實現了鍵到值的映射關系。作為可變數據類型,字典支持動態添加、修改和刪除操作。字典中的鍵值對是無序的,通過鍵來快速訪問對應的值,這種訪問方式比列表的索引訪問更加語義化和靈活。

鍵值對體現了現實世界中實體與屬性的關聯關系。當指定一個鍵時,Python 的哈希算法會快速定位并返回與之關聯的值。這種映射機制使得字典成為數據建模和配置管理的理想選擇。

# 復合數據類型的字典
employee = {'id': 'E001','name': '李明','skills': ['Python', 'Django'],'contact': {'email': 'li@company.com', 'phone': '138xxxx'}
}

訪問字典中的值

字典提供了直接通過鍵訪問值的機制。使用方括號語法 dict[key] 是最直接的訪問方式,但需要確保鍵的存在性,否則會拋出 KeyError 異常。

print(employee['name'])  # 輸出: 李明
print(employee['contact']['email'])  # 訪問嵌套字典

添加鍵值對

字典的動態特性允許在運行時添加新的鍵值對。新添加的鍵值對會根據哈希值存儲在適當的位置,不影響現有數據的訪問性能。

employee['department'] = '技術部'
employee['hire_date'] = '2023-01-15'

修改字典中的值

字典是可變對象,支持原地修改操作。修改操作不會改變字典的內存地址,只是更新了特定鍵對應的值。

employee['name'] = '李明華'  # 修改現有值
employee['skills'].append('FastAPI')  # 修改列表類型的值

刪除鍵值對

Python 提供了多種刪除字典鍵值對的方法,每種方法適用于不同的使用場景:

# del 語句 - 直接刪除
del employee['hire_date']# pop() 方法 - 刪除并返回值
old_name = employee.pop('name')# popitem() 方法 - 刪除并返回最后插入的鍵值對(Python 3.7+)
last_item = employee.popitem()

使用 get() 來訪問值

直接使用方括號語法訪問字典值時,如果鍵不存在會引發 KeyError 異常。get() 方法提供了安全的訪問機制,是異常處理的優雅替代方案。

get() 方法接受兩個參數:第一個參數是要查找的鍵(必需),第二個參數是鍵不存在時的默認返回值(可選,默認為 None)。這種設計模式在處理不確定數據源時特別有用。

# 安全訪問,避免 KeyError
department = employee.get('department', '未分配')
bonus = employee.get('bonus', 0)# 處理嵌套字典的安全訪問
email = employee.get('contact', {}).get('email', '未提供')

遍歷字典

字典遍歷是數據處理中的基本操作。Python 提供了多種遍歷方式,每種方式返回不同的視圖對象(view objects),這些視圖對象反映字典的實時狀態,具有內存高效的特點。

遍歷所有鍵值對

items() 方法返回字典的鍵值對視圖,是最常用的遍歷方式。它允許同時訪問鍵和值,適用于需要完整信息的處理場景。

user_scores = {'Alice': 95, 'Bob': 87, 'Charlie': 92}for name, score in user_scores.items():grade = 'A' if score >= 90 else 'B' if score >= 80 else 'C'print(f"{name}: {score} ({grade})")

遍歷字典中的所有鍵

當只需要處理字典的鍵時,keys() 方法是最佳選擇。它返回鍵的視圖對象,常用于條件檢查、鍵的變換或過濾操作。

config = {'debug': True, 'port': 8000, 'host': 'localhost'}# 檢查配置項
required_keys = ['host', 'port']
for key in config.keys():if key in required_keys:print(f"必需配置 {key}: {config[key]}")

按特定順序遍歷字典中的所有鍵

雖然現代 Python 保持插入順序,但有時需要按特定邏輯排序。sorted() 函數結合 keys() 方法可以實現各種排序需求。

sales = {'Q1': 45000, 'Q3': 52000, 'Q2': 38000, 'Q4': 61000}# 按鍵名排序
for quarter in sorted(sales.keys()):print(f"{quarter}: {sales[quarter]}")# 按值排序鍵
for quarter in sorted(sales.keys(), key=lambda x: sales[x], reverse=True):print(f"{quarter}: {sales[quarter]}")

遍歷字典中的所有值

values() 方法返回值的視圖對象,適用于值的統計分析、聚合計算等操作。由于不包含鍵信息,主要用于數值計算和數據分析場景。

需要注意的是,直接提取值可能包含重復項。在需要唯一值的場景下,應結合集合(set)進行去重處理,這是數據處理中的常見模式。

departments = {'Alice': '技術部','Bob': '銷售部', 'Charlie': '技術部','David': '市場部'
}# 統計部門分布
all_depts = list(departments.values())
unique_depts = set(departments.values())print(f"總人數: {len(all_depts)}")
print(f"部門數: {len(unique_depts)}")
print(f"各部門: {', '.join(unique_depts)}")

嵌套

在復雜的應用場景中,單層字典往往無法滿足數據建模需求。嵌套結構通過將字典作為值存儲在其他字典中,或將字典存儲在列表中,構建了多維數據模型。這種層次化的數據組織方式更貼近現實世界的復雜關系,是企業級應用中數據架構設計的基礎。

嵌套不僅提供了數據的邏輯分組,還支持更精細的數據訪問控制和處理策略。正如現實世界中,復雜問題往往涉及多個相互關聯的維度,嵌套字典為這種多維關系提供了自然的表達方式。

字典列表

字典列表是將多個結構相似的字典組織成列表的數據模式,適用于表示同類實體的集合,如用戶列表、產品目錄、訂單記錄等。這種結構結合了列表的有序性和字典的語義化訪問特點。

employees = [{'id': 'E001', 'name': '張三', 'dept': '技術部', 'salary': 8000},{'id': 'E002', 'name': '李四', 'dept': '銷售部', 'salary': 7000},{'id': 'E003', 'name': '王五', 'dept': '技術部', 'salary': 9000}
]# 部門薪資統計
tech_employees = [emp for emp in employees if emp['dept'] == '技術部']
avg_tech_salary = sum(emp['salary'] for emp in tech_employees) / len(tech_employees)
print(f"技術部平均薪資: {avg_tech_salary}")

字典列表支持復雜的查詢和聚合操作,是數據分析和報表生成的重要數據結構。通過列表推導式和內置函數的組合,可以實現高效的數據處理管道。

在字典中存儲列表

當需要將一個鍵關聯到多個值時,在字典中嵌套列表是最直接的解決方案。這種模式廣泛應用于分組、分類和一對多關系的建模中。

project_teams = {'電商平臺': {'manager': '張經理','developers': ['李開發', '王前端', '趙后端'],'technologies': ['Python', 'React', 'PostgreSQL'],'milestones': ['需求分析', '系統設計', '開發實現', '測試上線']},'APP開發': {'manager': '劉經理', 'developers': ['孫移動', '周UI'],'technologies': ['React Native', 'Node.js'],'milestones': ['原型設計', '開發實現', '測試發布']}
}# 技術棧統計
all_technologies = set()
for project in project_teams.values():all_technologies.update(project['technologies'])print(f"公司技術棧: {sorted(all_technologies)}")# 人員分配分析  
total_developers = sum(len(project['developers']) for project in project_teams.values())
print(f"總開發人員: {total_developers}人")

這種嵌套模式支持復雜的數據查詢和分析操作。通過合理設計嵌套結構,可以在保持數據完整性的同時,實現高效的數據訪問和處理。在實際應用中,這種模式常用于配置管理、權限控制、業務規則定義等場景。

字典的嵌套能力使其成為 JSON 數據處理、API 響應解析、配置文件管理等現代 Python 應用的核心工具。掌握嵌套字典的使用技巧,是構建可擴展、可維護應用程序的關鍵技能。


2025.09 西三旗

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/921793.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/921793.shtml
英文地址,請注明出處:http://en.pswp.cn/news/921793.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機視覺之多模板匹配

簡介 計算機視覺第一課opencv(四)保姆級教學 之前說過模糊匹配只是對于單個目標進行匹配,今天我們就來學習一下如何對多個目標進行匹配 一、多目標匹配 對于這個圖片我們要匹配下面那個箭頭,我們可以發現圖中是有兩個位置相同的…

封裝日期選擇器組件,帶有上周,下周按鈕

ui圖組件代碼如下&#xff1a; <template><div><el-date-pickerv-model"dateRange"type"daterange"align"right"size"mini":editable"false"unlink-panelsrange-separator"至"start-placeholder&q…

基于SpringBoot+MYSQL開發的AI智能大數據醫療診斷平臺

角色&#xff1a; 管理員、醫生、居民 技術&#xff1a; SpringBoot、MyBatis、MySQL、Shiro、Beetl、Swagger、jQuery、Bootstrap 核心功能&#xff1a; 這是一個基于SpringBoot的社區醫療管理平臺&#xff0c;旨在為管理員提供用戶、角色、部門、菜單、日志等系統管理功能&am…

【MFC 小白日記】對話框編輯器里“原型圖像”到底要不要勾?3 分鐘看懂!

摘要&#xff1a;本文解析了MFC中Picture Control的"原型圖像(Prototype Image)"屬性的真實作用。該屬性僅在設計時提供可視化的占位圖預覽&#xff0c;方便UI布局&#xff0c;運行時不會影響程序表現。文章通過對比實驗驗證&#xff0c;勾選后會在對話框編輯器中顯示…

微信開放平臺第三方平臺,可以管理多個微信小程序

大家好&#xff0c;我是小悟。 這個系統可以幫助服務商更好地管理多個商家小程序&#xff0c;無需管理多個商家小程序的賬號密碼或者appId和secret&#xff0c;大大提升效率。 不需要頻繁登錄小程序后臺就能完成上傳代碼、認證、備案、提交代碼審核、發布小程序等操作。 這里錄…

Java全棧學習筆記32

-- drop table t_stu;-- unique 唯一約束的列允許為null-- 如果在之后的操作中。需要某列必須為key&#xff0c;才能做一些操作的情況下。也可以使用唯一約束代替主鍵約束-- create table t_stu(-- studId int,-- tel varchar(11) unique,-- sex varchar(1),-- addr va…

linux升級系統,重啟出現Minimal BASH-like line editingis supported

文章目錄一.問題背景二.解決步驟2.1確認系統分區2.2手動引導2.3 重建grub引導2.4 還原軟件包 一.問題背景 閑來無事&#xff0c;把ubuntu25.04通過sudo do-release-upgrade命令升級到了ubuntu25.10.在升級的過程會出現以下問題 1.自動替換flatpak程序為snap2.請求是否清除舊依賴…

type(類型別名)和 interface的區別和最佳實踐

核心結論在大多數情況下&#xff0c;它們可以互換使用&#xff0c;都能描述對象的結構。它們的區別更多在于設計和擴展能力上。主要區別總結表特性interface (接口)type (類型別名)擴展方式使用 extends 繼承interface A extends B {}使用 & 交叉類型type A B & C合并…

vscode中使用git、githup的基操

一、git提交 配置賬戶密碼 查看用戶信息 git config --global user.name # 查看用戶名 git config --global user.email # 查看郵箱賬戶配置 # 設置全局用戶名和郵箱 git config --global user.name "你的用戶名" git config --global user.email "你的郵箱&q…

jsBridge接入流程

import deviceInfo from ./deviceInfo import { setRefreshToken } from ./token// 設備判斷 const u navigator.userAgent export const isAndroid u.indexOf(Android) > -1 || u.indexOf(Adr) > -1 export const isIOS !!u.match(/\(i[^;];( U;)? CPU.Mac OS X/)…

【C++】19. 封裝紅?樹實現set和map

文章目錄一、源碼及框架分析二、模擬實現map和set1、insert的實現2、iterator的實現3、map?持[ ]4、模擬實現的完整源代碼1&#xff09;RBTree.h2&#xff09;Myset.h3&#xff09;Mymap.h4&#xff09;Test.cpp一、源碼及框架分析 SGI-STL30版本源代碼&#xff0c;map和set的…

面試不會問題

1. 什么是表鎖&#xff1f;什么是行鎖&#xff1f;什么情況下會使用表鎖&#xff1f;InnoDB引擎通過“索引”實現行鎖&#xff08;鎖定滿足條件的行&#xff09;&#xff0c;但如果操作無法通過索引定位行&#xff0c;會導致行鎖失效&#xff0c;進而升級為表鎖。常見的表現為&…

達夢數據庫-用戶,權限,角色

達夢數據庫-用戶,權限,角色 在達夢數據庫(DM8)中,用戶(User)、權限(Privilege)和角色(Role) 是數據庫安全體系的核心組成部分,用于控制誰可以訪問數據庫、能訪問哪些對象以及能執行哪些操作。 下面為你提供一份全面、詳細、結構化的說明,幫助你深入理解達夢數據…

uniapp原生插件 TCP Socket 使用文檔

uniapp原生插件 TCP Socket 使用文檔 試了插件市場幾個TCP Socket插件都不能實現監聽服務器主動斷開&#xff0c;于是閑來無事就開發了一款&#xff0c;本插件是一個基于 Netty 實現的 TCP 通信模塊&#xff0c;用于在 UniApp 插件中提供 TCP 連接、數據發送和連接管理功能。以…

VM中CentOS 7密碼重置

重啟虛擬機點擊e進入內核處理向下劃找到UTF-8在后面輸入rd.breakctrl X進入單用戶模式mount -o remount,rw/sysroot進行掛盤 chroot /sysroot訪問系統&#xff0c;并使用passwd修改root密碼 出現亂碼 輸入LANGen touch /.autorelabel 保存配置 exit exit退出等待系統重新打開&…

車規級MOS管AEC-Q101認證的關鍵參數解讀與失效模式-深圳阿賽姆

摘要本文拆解AEC-Q101認證的7大關鍵測試項&#xff08;UIS/溫度循環/THB等&#xff09;&#xff0c;結合M120N06JC等型號實測數據&#xff0c;解析雪崩失效/柵氧擊穿/綁定線脫落等故障機理&#xff0c;附選型核查表一、AEC-Q101認證核心測試項與參數解讀1.1 非鉗位電感開關測試…

嵌入式鐵頭山羊stm32-ADC實現軟件觸發的常規序列的單通道轉換-Day25

目錄 一、實驗目的 二、電路連接 三、實驗執行&#xff08;五步&#xff09; 1.初始化ADC的IO引腳 2.配置ADC的時鐘&#xff0c;注意要小于14MHz 3.根據ADC的編程接口 實現初始化ADC的基本參數 4.配置常規序列并閉合觸發輸入開關 5.閉合總開關、啟動并讀取轉換結果 四…

多模態模型出現“幻覺”,描述了表格中不存在的內容,如何修正?

在日常工作中&#xff0c;多模態模型的 “幻覺” 問題已成為影響效率的關鍵痛點 —— 當我們需要模型基于文檔生成建議性內容&#xff08;如行業報告分析、論文數據解讀等&#xff09;時&#xff0c;模型常因無法準確理解文檔信息&#xff0c;輸出包含 “虛構內容” 的結果&…

Java AI 智能問數:Function調用版如何重塑企業數據決策

Java AI 智能問數&#xff1a;Function調用版如何重塑企業數據決策 在數字化轉型浪潮中&#xff0c;企業一把手常面臨數據查詢的痛點&#xff1a;分析師需編寫復雜SQL&#xff0c;業務人員依賴IT支持&#xff0c;決策鏈條冗長。傳統方法效率低下&#xff0c;而自然語言處理&…

AI-調查研究-74-具身智能 機器人學習新突破:元學習與仿真到現實遷移的挑戰與機遇

點一下關注吧&#xff01;&#xff01;&#xff01;非常感謝&#xff01;&#xff01;持續更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持續更新中&#xff01;&#xff08;長期更新&#xff09; AI煉丹日志-31- 千呼萬喚始出來 GPT-5 發布&#xff01;“快的…