Python 字典 (Dictionary)使用詳解
字典
字典是python中最重要,最常用的數(shù)據(jù)結(jié)構(gòu)之一,它提供了高效的鍵值對存儲和查找能力。
1.基本特性
- 鍵值對集合:存儲數(shù)據(jù)形式為 key: value 對
- 無序性:Python 3.7+ 開始保持插入順序(實現(xiàn)細節(jié),應視為無序)
- 可變性:可以動態(tài)添加、修改、刪除鍵值對
- 鍵的唯一性:每個鍵必須是唯一的
- 鍵的可哈希性:鍵必須是不可變類型(如字符串、數(shù)字、元組等)
- 高效查找:基于哈希表實現(xiàn),查找時間復雜度接近 O(1)
2.創(chuàng)建字典
# 使用花括號(最常用) d1 = {'name': 'Alice', 'age': 25} # 使用 dict() 構(gòu)造函數(shù) d2 = dict(name='Bob', age=30) # 鍵作為關(guān)鍵字參數(shù) d3 = dict([('name', 'Charlie'), ('age', 35)]) # 從鍵值對序列 # 字典推導式 d4 = {x: x**2 for x in range(5)} # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16} # fromkeys 方法 - 為多個鍵設(shè)置相同的默認值 keys = ['a', 'b', 'c'] d5 = dict.fromkeys(keys, 0) # {'a': 0, 'b': 0, 'c': 0} # 空字典 empty_dict = {} empty_dict2 = dict()
3.訪問元素
person = {'name': 'Alice', 'age': 25, 'city': 'New York'} # 通過鍵訪問 print(person['name']) # 'Alice' # 使用 get() 方法(避免KeyError) print(person.get('age')) # 25 print(person.get('country')) # None print(person.get('country', 'USA')) # 指定默認值 'USA' # 檢查鍵是否存在 print('name' in person) # True print('country' in person) # False # 獲取所有鍵、值、鍵值對 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è)置默認值 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 語句 del person['age'] # pop() - 刪除并返回指定鍵的值 city = person.pop('city') # 返回 'New York' # popitem() - 刪除并返回最后插入的鍵值對 (Python 3.7+) key, value = person.popitem() # 可能是任意項(Python 3.7前) # clear() - 清空字典 person.clear() # {} # 注意:刪除不存在的鍵會引發(fā) KeyError
6.字典遍歷
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) # 遍歷鍵值對 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.字典的高級特性
默認字典 (collections.defaultdict)
from collections import defaultdict # 為不存在的鍵提供默認值 word_counts = defaultdict(int) # 默認值為 int() 即 0 word_counts['apple'] += 1 # 自動初始化為0然后加1 # 復雜默認值 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
計數(shù)器
from collections import Counter # 統(tǒng)計元素出現(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.字典的視圖對象
字典的keys(),values(),items()返回的是視圖對象:
d = {'a': 1, 'b': 2} keys = d.keys() # 視圖是動態(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) 時間復雜度
- 內(nèi)存占用較大:比列表等結(jié)構(gòu)占用更多內(nèi)存
- 鍵的選擇:
- 使用簡單、不可變對象作為鍵
- 避免使用復雜對象作為鍵
- 字符串是最常用的鍵類型
11.適用場景
- 存儲對象屬性或配置信息
- 快速查找表
- 實現(xiàn)稀疏數(shù)據(jù)結(jié)構(gòu)
- 緩存計算結(jié)果(Memoization)
- 數(shù)據(jù)分組和聚合
- JSON數(shù)據(jù)交互
小結(jié)
- 字典鍵必須是可哈希的(不可變類型)
- 允許:字符串、數(shù)字、元組(僅包含可哈希元素)
- 不允許:列表、字典、集合等可變類型
- 比較操作:
- == 比較鍵值對內(nèi)容
- != 判斷是否不相等
- 沒有 <, > 等比較操作
- 字典在Python 3.6及之前是無序的,3.7+開始保持插入順序(作為實現(xiàn)細節(jié),3.7正式成為語言特性)
字典是Python中最靈活和強大的數(shù)據(jù)結(jié)構(gòu)之一,熟練掌握字典的使用可以極大提高Python編程效率和代碼質(zhì)量。
到此這篇關(guān)于Python 字典 (Dictionary) 詳解的文章就介紹到這了,更多相關(guān)Python 字典 Dictionary內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決安裝tensorflow遇到無法卸載numpy 1.8.0rc1的問題
今天小編就為大家分享一篇解決安裝tensorflow遇到無法卸載numpy 1.8.0rc1的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06Python實現(xiàn)pdf電子發(fā)票信息提取到excel表格
這篇文章主要為大家詳細介紹了如何使用Python實現(xiàn)pdf電子發(fā)票信息提取并保存到excel表格,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2025-05-05