Python之--字典

定義

字典(dict)是一種無序、可變且可哈希的數據結構,字典是根據一個信息來查找另一個信息,它表示索引用的鍵和對應的值構成的成對關系。

特點

(1)字典與列表一樣,是Python里面的可變數據類型

(2)必須唯一且不可變(如字符串、數字、元組),可以是任意類型。

(3)有無序性。

(4)基于哈希表實現,支持高效查找,查找插入和刪除操作的時間復雜度接近 O (1)。

字典的創建方式

一、使用 {} 直接創建字典

語法格式:

d = {key1: value1, key2: value2, ...}  

1、用大括號 { } 包裹鍵值對(key: value 形式),多個鍵值對用逗號 , 分隔。
2、鍵(key):必須是不可變類型(如字符串、數字、元組),且字典內鍵唯一;
3、值(value):可以是任意 Python 數據類型(字符串、數字、列表、字典等都行)。

示例:?

# 直接用 {} 定義字典,存儲學生信息  
student = {"name": "小明",   # 鍵 "name" 是字符串,值 "小明" 是字符串  "age": 15,       # 鍵 "age" 是字符串,值 15 是整數  "hobbies": ["籃球", "音樂"]  # 鍵 "hobbies" 是字符串,值是列表  
}  print(student)  
# 輸出: {'name': '小明', 'age': 15, 'hobbies': ['籃球', '音樂']}  

?二、用內置函數 dict() 創建字典

1. 直接傳 key=value 形式參數

語法格式:

d = dict(key1=value1, key2=value2, ...)  

說明:

(1)括號里用 key=value 形式傳參(類似函數傳參),Python 會自動把這些參數轉為字典的鍵值對.

(2)這里的 key 不用加引號(本質是參數名),但實際存到字典里會變成字符串類型的鍵。?

?示例:

# 用 dict() + key=value 形式創建字典  
person = dict(name="小紅", age=20, city="北京")  print(person)  
# 輸出: {'name': '小紅', 'age': 20, 'city': '北京'}  

?2. 結合 zip() 映射創建字典(“通過映射函數創建” 本質就是這用法)

語法格式:

# 先用 zip(lst1, lst2) 把兩個列表 “配對”,再用 dict() 轉成字典  
d = dict(zip(lst1, lst2))  

(1)zip(lst1, lst2):把兩個列表 對應位置的元素 打包成元組,返回一個可迭代的 zip 對象。比如 lst1 = [10,20]、lst2 = ["cat","bar"],zip 后會得到 (10, 'cat'), (20, 'bar')。

(2)dict() 會把這些元組里的 第一個元素當鍵、第二個元素當值,最終轉成字典。?

示例:

lst1 = [10, 20, 30, 40]  
lst2 = ["cat", "bar", "zoo", "pat"]  # 1. 用 zip 配對兩個列表  
zipped = zip(lst1, lst2)  
# 此時 zipped 是可迭代對象,內容類似: (10, 'cat'), (20, 'bar'), (30, 'zoo'), (40, 'pat')  # 2. 用 dict() 轉成字典  
result = dict(zipped)  print(result)  
# 輸出: {10: 'cat', 20: 'bar', 30: 'zoo', 40: 'pat'}  

?**重點:

(1)lst1 里的元素會作為字典的 鍵,必須保證不可變且唯一(如果 lst1 有重復元素,后面的會覆蓋前面的)。

(2)lst2 里的元素是字典的 值,類型無限制。

(3)如果兩個列表長度不一致,zip 會以 較短的列表為準,多余元素會被忽略。

字典的訪問

1、使用 d[key]

通過鍵直接訪問對應的值。

缺點:如果鍵不存在,會拋出 KeyError 異常。

print(d['hello'])  # 輸出: 10
# print(d['java'])  # 報錯: KeyError: 'java'

2、使用 d.get(key, default=None)

通過鍵獲取值,若鍵不存在則返回默認值(默認為 None)。

優點:避免 KeyError,增強代碼健壯性。?

print(d.get('hello'))        # 輸出: 10
print(d.get('java'))         # 輸出: None(默認值)
print(d.get('java', '不存在'))  # 輸出: '不存在'(自定義默認值)

?

字典的遍歷

1、使用字典(Dictionary)類型的一個內置方法 items()

語法格式

dict.items()

dict 表示一個具體的字典對象,比如 my_dict = {'key1': 'value1', 'key2': 'value2'},my_dict.items()的 my_dict 就是字典對象。items() 方法會返回一個包含字典所有鍵值對的視圖對象(dict_items類型),這個視圖對象是可迭代的,其中每個元素都是一個由鍵和值組成的元組

my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
result = my_dict.items()
print(result)
# 輸出: dict_items([('name', 'Alice'), ('age', 25), ('city', 'New York')])

items() 方法通常h結合循環使用

# 字典的遍歷
for item in d.items():print(item)  # key=value組成的一個元素

?

2、解包遍歷(分別獲取 key 和 value )?
# 在使用for循環遍歷時,分別獲取key,value
for key, value in d.items():print(key, value)

?

字典的一些相關操作

字典的方法描述說明
d.keys()獲取所有的 key 數據
d.values()獲取所有的 value 數據
d.pop(key,default)key 存在獲取相應的 value,同時刪除 key - value 對,否則獲取默認值
d.popitem()隨機從字典中取出一個 key - value 對,結果為元組類型,同時將該 key - value 從字典中刪除
d.clear()清空字典中所有的 key - value 對

示例

my_dict = {'name': '小明', 'age': 18, 'city': '北京'}# 1、d.keys():獲取所有的 key 數據keys = my_dict.keys()
print(keys)
# 輸出(Python 3 中返回可迭代的 dict_keys 對象,便于遍歷等操作 ):
# dict_keys(['name', 'age', 'city'])
# 可轉成列表直觀查看
print(list(keys))  
# 輸出: ['name', 'age', 'city']# 2、d.values():獲取所有的 value 數據values = my_dict.values()
print(values)
# 輸出(返回 dict_values 對象 ):
# dict_values(['小明', 18, '北京'])
# 轉列表
print(list(values))  
# 輸出: ['小明', 18, '北京']# 3、d.pop(key, default):根據 key 獲取 value 并刪除鍵值對,不存在則用默認值# key 存在的情況
age_value = my_dict.pop('age', '默認值')
print(age_value)  
# 輸出: 18 ,同時 my_dict 里的 'age': 18 被刪除
print(my_dict)  
# 輸出: {'name': '小明', 'city': '北京'}
# key 不存在的情況
gender_value = my_dict.pop('gender', '未知')
print(gender_value)  
# 輸出: '未知' ,因為字典里沒有 'gender' 這個 key# 4、d.popitem():隨機取出一個 key - value 對(Python 3.7+ 后默認按插入順序,逆序彈出 )item = my_dict.popitem()
print(item)  
# 比如可能輸出 ('city', '北京') ,具體取決于字典當前狀態,彈出后該鍵值對從字典刪除
print(my_dict)  
# 彈出后字典內容如: {'name': '小明'} # 5、d.clear():清空字典所有 key - value 對my_dict.clear()
print(my_dict)  
# 輸出: {} ,字典變成空字典

字典生成式

1、借助 range 構建簡單映射(需明確 key、value 邏輯)
# 示例:用 range 生成字典,這里假設 key 是數字,value 是其平方(可按需改 key:value 邏輯)
d = {item: item**2 for item in range(5)}  
print(d)
# 輸出: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

item 來自 range 遍歷,key:value 是自定義的映射規則(比如示例里 item 做 key,item**2 做 value )?

2、用 zip 關聯兩個列表生成字典(適合數據配對場景)
lst1 = ['a', 'b', 'c']
lst2 = [1, 2, 3]
d = {key: value for key, value in zip(lst1, lst2)}  
print(d)
# 輸出: {'a': 1, 'b': 2, 'c': 3}

利用 zip(lst1, lst2) 把兩個列表對應位置元素打包成元組,遍歷元組時拆出 key(來自 lst1 )和 value(來自 lst2 )構建字典 。

關于字典的內容就到這里啦~~

感謝觀看!!?

?

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

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

相關文章

【ARM】ARM微架構

1、 文檔目標對 ARM 微架構的概念有初步的了解。2、 問題場景在和客戶溝通和新同事交流時對于 ARM 架構和微架構二者有什么區別和聯系,做一個簡單的介紹。3、軟硬件環境1、軟件版本:不涉及2 、電腦環境:不涉及4、關于 ARM 架構和微架構架構不…

c++注意點(11)----設計模式(工廠方法)

創建型模式工廠方法模式是一種創建型設計模式, 其在父類中提供一個創建對象的方法, 允許子類決定實例化對象的類型。為什么需要工廠方法模式?看一個 “沒有工廠模式” 的痛點場景:假設你在開發一個游戲,最初只有 “戰士…

基于Kubernetes的微服務CI/CD:Jenkins Pipeline全流程實踐

一、部署gitlab GitLab 是一個集代碼托管、CI/CD、項目管理、安全掃描于一體的 DevOps 平臺,提供從代碼編寫到部署的全生命周期管理。它支持 Git 版本控制,內置自動化流水線,可與 Kubernetes 集成,實現云原生應用的持續交付。同時…

Spring Bean初始化及@PostConstruc執行順序

目錄 1. Bean初始化執行順序 2. 成員變量初始化順序 2.1 普通Java類(非Spring環境) (1) 默認初始化(即初始分配內存) (2) 顯式初始化 (3) 構造器初始化 (4)完整順序 2.2 Spring管理的Bean(依賴注入場景) (1) 普通成員變量…

webRTC合并本地源碼修改和官方更新

一、總體思路:基于 Git 分支管理改動origin/main 是官方 WebRTC 主干(來自 webrtc.googlesource.com)。my/webrtc 是你自己開發和修改的分支。每次 Google 更新 WebRTC,你從 origin/main 拉新代碼,再把 my/webrtc 分支…

c++注意點(12)----設計模式(生成器)

創建型模式生成器模式(Builder Pattern)是一種創建型設計模式,它專注于將復雜對象的構建過程與表示分離,使得同樣的構建過程可以創建不同的表示。就像是做飯,你可以自己慢慢做,各個步驟自己選擇。而使用生成…

[特殊字符] VLA 如何“繞過”手眼標定?—— 當機器人學會了“看一眼就動手”

🔮 VLA 如何“繞過”手眼標定?—— 當機器人學會了“看一眼就動手” 作者:石去皿 發布時間:2025年7月 在傳統機器人系統中,“手眼標定”是每一個工程師都繞不開的課題。 你必須精確測量相機和機械臂之間的空間變換關系…

《Maven 核心基礎筆記(第一天)》

1.說明maven軟件依賴管理和項目構建功能maven是為Java項目工作的 功能體現:依賴管理,項目構建 依賴管理:我們只需要寫配置文件(pom.xml),maven就會幫我們下載依賴,并且也會下載依賴的依賴。 項目構建:項目源…

Yolo底層原理學習(V1~V3)(第一篇)

一,卷積后的特征圖大小計算眾所周知,提到深度學習,必不可少的會提及卷積,那么如何計算卷積之后的圖片大小呢?下圖呈現:如圖, 我們令FH,FW為原圖像的長度FH*FW。P為padding的長度&…

前端開發項目性能瓶頸分析

1. 使用 rollup-plugin-visualizer 分析構建 借助 rollup-plugin-visualizer 插件,可以分析通過 rollup 構建出的產物內容,并生成可視化圖表,幫助你分析打包后的文件大小以及各個模塊的占用情況。 1.1. 安裝插件 你需要在你的項目中安裝 r…

ExoData.h - OpenExo

ExoData.h文件定位源代碼1. 頭文件依賴2. 核心類聲明3. 主要成員函數關節遍歷工具關節與配置相關數據/狀態操作控制參數/校準4. 主要成員變量總結文件定位 位置:src/ExoData.h 作用:定義 ExoData 類,作為 Exo 系統全局數據的核心容器。它將設…

緩存HDC內容用于后續Direct2D繪制.

思路&#xff1a;把HDC里的內容保存到Direct2D格式的位圖里&#xff0c;后續直接調用 renderTarget->DrawBitmap即可。本例中&#xff0c;位圖將保存為類的字段。本例中 COM 接口指針皆使用 com_ptr&#xff0c;這是 WinRT 的 COM 智能指針類&#xff0c;com_ptr<I>::…

“抓了個寂寞”:一次實時信息采集的意外和修復

1. 那天下午&#xff0c;輿情系統“遲到”了 那天下午&#xff0c;公司運營那邊突然在群里喊&#xff1a;“XX事件都快上熱搜榜前十了&#xff0c;咱們系統咋沒反應&#xff1f;” 我愣了幾秒&#xff0c;立馬翻后臺日志、爬蟲執行記錄&#xff0c;結果一查&#xff0c;還真有點…

數據結構之迪杰斯特拉算法

前言&#xff1a;前面兩篇文章介紹了生成圖的最小生成樹的算法&#xff0c;接下來兩篇文章會介紹圖的最短路徑的算法&#xff0c;迪杰斯特拉算法和弗洛伊德算法。迪杰斯特拉算法是用來計算一個點到其他所有點的最短路徑&#xff0c;這個點稱之為源點。 一、實現流程 回憶一下…

技術文檔 | OpenAI 的 Kafka 演進之路與 Pulsar 遷移潛力

導讀ChatGPT 用戶量指數級暴漲&#xff0c;OpenAI 的 Kafka 集群在一年內增長 20 倍至 30 個集群[1]&#xff0c;其 Kafka 架構面臨日均千億級消息&#xff08;峰值 QPS 800萬/秒&#xff09; 的壓力。這揭示了一個關鍵事實&#xff1a;OpenAI 的成功不只依賴模型&#xff0c;更…

【bug】 jetson上opencv無法錄制h264本地視頻

在Jetson Orin NX上無法使用opencv直接錄制h264/h265視頻流&#xff08;h264格式的視頻流才能在瀏覽器播放&#xff09; 解決&#xff1a; 軟件編碼&#xff1a;需要源碼編譯opencv 1.環境準備 pip uninstall opencv-python sudo apt install build-essential cmake git python…

解決http的web服務中與https服務交互的問題

問題背景&#xff1a; 需要在一個http的web服務中直接跟另一個https服務交互&#xff0c;不經過自身后端。 又來到了熟悉的跨域訪問問題。 解決邏輯就是使用nginx轉發&#xff0c;涉及到的文件也就是nginx.conf文件&#xff0c;前面解決minio鏈接時已經有經驗了&#xff0c;但…

網站訪問信息追蹤系統在安全與性能優化中的關鍵作用——網絡安全—仙盟創夢IDE

<?php // 收集訪問信息 $visitorInfo未來之窗 [timestamp > date(Y-m-d H:i:s),ip > $_SERVER[REMOTE_ADDR] ?? unknown,page > $_SERVER[REQUEST_URI] ?? unknown,method > $_SERVER[REQUEST_METHOD] ?? unknown,user_agent > $_SERVER[HTTP_USER_A…

Oracle 時間處理函數和操作符筆記

前言 寫sql時經常用到時間處理函數&#xff0c;我整理了一份Oracle的常用sql筆記,供大家參考。 如果對你有幫助&#xff0c;請點贊支持~ 多謝&#x1f64f; 筆記 -- 1. 獲取當前日期和時間 -- SYSDATE, SYSTIMESTAMP, CURRENT_DATE, CURRENT_TIMESTAMP, LOCALTIMESTAMP SELE…

TDengine時序數據庫 詳解

1. TDengine 簡介 TDengine 是一款 高性能、分布式、支持 SQL 的時序數據庫&#xff08;Time-Series Database, TSDB&#xff09;&#xff0c;專為 物聯網&#xff08;IoT&#xff09;、工業互聯網、金融監控、日志分析 等場景設計。其核心特點包括&#xff1a; 超高性能&…