Python 字典 (Dictionary)使用詳解
字典
字典是python中最重要,最常用的數(shù)據(jù)結(jié)構(gòu)之一,它提供了高效的鍵值對(duì)存儲(chǔ)和查找能力。
1.基本特性
- 鍵值對(duì)集合:存儲(chǔ)數(shù)據(jù)形式為 key: value 對(duì)
- 無(wú)序性:Python 3.7+ 開始保持插入順序(實(shí)現(xiàn)細(xì)節(jié),應(yīng)視為無(wú)序)
- 可變性:可以動(dòng)態(tài)添加、修改、刪除鍵值對(duì)
- 鍵的唯一性:每個(gè)鍵必須是唯一的
- 鍵的可哈希性:鍵必須是不可變類型(如字符串、數(shù)字、元組等)
- 高效查找:基于哈希表實(shí)現(xiàn),查找時(shí)間復(fù)雜度接近 O(1)
2.創(chuàng)建字典
# 使用花括號(hào)(最常用)
d1 = {'name': 'Alice', 'age': 25}
# 使用 dict() 構(gòu)造函數(shù)
d2 = dict(name='Bob', age=30) # 鍵作為關(guān)鍵字參數(shù)
d3 = dict([('name', 'Charlie'), ('age', 35)]) # 從鍵值對(duì)序列
# 字典推導(dǎo)式
d4 = {x: x**2 for x in range(5)} # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
# fromkeys 方法 - 為多個(gè)鍵設(shè)置相同的默認(rèn)值
keys = ['a', 'b', 'c']
d5 = dict.fromkeys(keys, 0) # {'a': 0, 'b': 0, 'c': 0}
# 空字典
empty_dict = {}
empty_dict2 = dict()3.訪問(wèn)元素
person = {'name': 'Alice', 'age': 25, 'city': 'New York'}
# 通過(guò)鍵訪問(wèn)
print(person['name']) # 'Alice'
# 使用 get() 方法(避免KeyError)
print(person.get('age')) # 25
print(person.get('country')) # None
print(person.get('country', 'USA')) # 指定默認(rèn)值 'USA'
# 檢查鍵是否存在
print('name' in person) # True
print('country' in person) # False
# 獲取所有鍵、值、鍵值對(duì)
print(person.keys()) # dict_keys(['name', 'age', 'city'])
print(person.values()) # dict_values(['Alice', 25, 'New York'])
print(person.items()) # dict_items([('name', 'Alice'), ('age', 25), ('city', 'New York')])4.修改字典
person = {'name': 'Alice', 'age': 25}
# 添加/修改元素
person['city'] = 'New York' # 添加
person['age'] = 26 # 修改
# update() 方法 - 批量更新
person.update({'age': 27, 'country': 'USA'})
# setdefault() - 如果鍵不存在則設(shè)置默認(rèn)值
person.setdefault('gender', 'female') # 返回 'female'
person.setdefault('name', 'Bob') # 不修改,返回 'Alice'
# 合并字典 (Python 3.9+)
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
merged = dict1 | dict2 # {'a': 1, 'b': 3, 'c': 4}5.刪除元素
person = {'name': 'Alice', 'age': 25, 'city': 'New York'}
# del 語(yǔ)句
del person['age']
# pop() - 刪除并返回指定鍵的值
city = person.pop('city') # 返回 'New York'
# popitem() - 刪除并返回最后插入的鍵值對(duì) (Python 3.7+)
key, value = person.popitem() # 可能是任意項(xiàng)(Python 3.7前)
# clear() - 清空字典
person.clear() # {}
# 注意:刪除不存在的鍵會(huì)引發(fā) KeyError6.字典遍歷
scores = {'Alice': 85, 'Bob': 92, 'Charlie': 78}
# 遍歷鍵
for name in scores:
print(name)
for name in scores.keys():
print(name)
# 遍歷值
for score in scores.values():
print(score)
# 遍歷鍵值對(duì)
for name, score in scores.items():
print(f"{name}: {score}")
# 帶索引的遍歷 (Python 3.7+ 保持插入順序)
for i, (name, score) in enumerate(scores.items()):
print(f"{i+1}. {name}: {score}")7.字典的高級(jí)特性
默認(rèn)字典 (collections.defaultdict)
from collections import defaultdict
# 為不存在的鍵提供默認(rèn)值
word_counts = defaultdict(int) # 默認(rèn)值為 int() 即 0
word_counts['apple'] += 1 # 自動(dòng)初始化為0然后加1
# 復(fù)雜默認(rèn)值
grouped_data = defaultdict(list)
grouped_data['fruits'].append('apple')有序字典
from collections import OrderedDict # 保持元素插入順序(Python 3.7+ 普通字典也保持順序) od = OrderedDict() od['a'] = 1 od['b'] = 2 od['c'] = 3
計(jì)數(shù)器
from collections import Counter
# 統(tǒng)計(jì)元素出現(xiàn)次數(shù)
words = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
word_counts = Counter(words)
print(word_counts.most_common(2)) # [('apple', 3), ('banana', 2)]8.字典的視圖對(duì)象
字典的keys(),values(),items()返回的是視圖對(duì)象:
d = {'a': 1, 'b': 2}
keys = d.keys()
# 視圖是動(dòng)態(tài)的
d['c'] = 3
print(keys) # dict_keys(['a', 'b', 'c'])
# 支持集合操作
d1 = {'a': 1, 'b': 2}
d2 = {'b': 3, 'c': 4}
print(d1.keys() & d2.keys()) # {'b'}
print(d1.keys() - d2.keys()) # {'a'}9.字典與JSON
import json
# 字典轉(zhuǎn)JSON
person = {'name': 'Alice', 'age': 25}
json_str = json.dumps(person) # '{"name": "Alice", "age": 25}'
# JSON轉(zhuǎn)字典
person_dict = json.loads(json_str)10.性能考慮
- 查找速度快:接近 O(1) 時(shí)間復(fù)雜度
- 內(nèi)存占用較大:比列表等結(jié)構(gòu)占用更多內(nèi)存
- 鍵的選擇:
- 使用簡(jiǎn)單、不可變對(duì)象作為鍵
- 避免使用復(fù)雜對(duì)象作為鍵
- 字符串是最常用的鍵類型
11.適用場(chǎng)景
- 存儲(chǔ)對(duì)象屬性或配置信息
- 快速查找表
- 實(shí)現(xiàn)稀疏數(shù)據(jù)結(jié)構(gòu)
- 緩存計(jì)算結(jié)果(Memoization)
- 數(shù)據(jù)分組和聚合
- JSON數(shù)據(jù)交互
小結(jié)
- 字典鍵必須是可哈希的(不可變類型)
- 允許:字符串、數(shù)字、元組(僅包含可哈希元素)
- 不允許:列表、字典、集合等可變類型
- 比較操作:
- == 比較鍵值對(duì)內(nèi)容
- != 判斷是否不相等
- 沒有 <, > 等比較操作
- 字典在Python 3.6及之前是無(wú)序的,3.7+開始保持插入順序(作為實(shí)現(xiàn)細(xì)節(jié),3.7正式成為語(yǔ)言特性)
字典是Python中最靈活和強(qiáng)大的數(shù)據(jù)結(jié)構(gòu)之一,熟練掌握字典的使用可以極大提高Python編程效率和代碼質(zhì)量。
到此這篇關(guān)于Python 字典 (Dictionary) 詳解的文章就介紹到這了,更多相關(guān)Python 字典 Dictionary內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決python使用list()時(shí)總是報(bào)錯(cuò)的問(wèn)題
這篇文章主要介紹了解決python使用list()時(shí)總是報(bào)錯(cuò)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05
Python 轉(zhuǎn)換時(shí)間戳為指定格式日期
這篇文章主要為大家介紹了Python轉(zhuǎn)換時(shí)間戳,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2021-12-12
Python機(jī)器學(xué)習(xí)庫(kù)scikit-learn使用詳解
scikit-learn是Python中最流行的機(jī)器學(xué)習(xí)庫(kù)之一,它提供了各種各樣的機(jī)器學(xué)習(xí)算法和工具,包括分類、回歸、聚類、降維等2023-03-03
解決安裝tensorflow遇到無(wú)法卸載numpy 1.8.0rc1的問(wèn)題
今天小編就為大家分享一篇解決安裝tensorflow遇到無(wú)法卸載numpy 1.8.0rc1的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06
Python實(shí)現(xiàn)pdf電子發(fā)票信息提取到excel表格
這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)pdf電子發(fā)票信息提取并保存到excel表格,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-05-05

