2026/4/18 13:59:45
网站建设
项目流程
临沂中文网站建设,网站正在建设中亚洲,高校档案室网站建设,国内创意网站界面设计Python 字典详解
1. 字典基础
什么是字典#xff1f;
字典是Python中一种可变、无序的键值对集合。每个键值对用冒号分隔#xff0c;键值对之间用逗号分隔#xff0c;整个字典包括在花括号 {} 中。
# 创建字典
person {name: Alice,age字典是Python中一种可变、无序的键值对集合。每个键值对用冒号分隔键值对之间用逗号分隔整个字典包括在花括号{}中。# 创建字典person{name:Alice,age:25,city:New York}# 访问值print(person[name])# 输出: Aliceprint(person.get(age))# 输出: 25字典的特点键必须是不可变类型字符串、数字、元组键必须是唯一的值可以是任意类型无序Python 3.7 保持了插入顺序2. 创建字典的方法# 方法1: 直接创建dict1{name:Alice,age:25}# 方法2: 使用 dict() 构造函数dict2dict(nameBob,age30)# 方法3: 从键值对列表创建dict3dict([(name,Charlie),(age,35)])# 方法4: 使用字典推导式dict4{x:x**2forxinrange(5)}# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}# 方法5: 使用 fromkeys() 创建默认值字典keys[name,age,city]dict5dict.fromkeys(keys,None)# {name: None, age: None, city: None}3. 常用字典操作访问元素person{name:Alice,age:25}# 使用键访问print(person[name])# Alice# 使用 get() 方法避免 KeyErrorprint(person.get(age))# 25print(person.get(height,Not found))# 默认值: Not found# 检查键是否存在print(nameinperson)# Trueprint(heightinperson)# False添加和修改元素person{name:Alice}# 添加新键值对person[age]25person[city]New York# 修改值person[age]26# 使用 update() 方法person.update({job:Engineer,age:27})删除元素person{name:Alice,age:25,city:NY}# 删除指定键delperson[city]# 使用 pop() 删除并返回值ageperson.pop(age)# 返回 25# 使用 popitem() 删除最后一个键值对Python 3.7itemperson.popitem()# 返回 (name, Alice)# 清空字典person.clear()# 删除整个字典delperson4. 字典遍历student{name:Alice,age:22,major:Computer Science,grades:{math:90,english:85}}# 遍历键forkeyinstudent:print(key)# 遍历键显式forkeyinstudent.keys():print(key)# 遍历值forvalueinstudent.values():print(value)# 遍历键值对forkey,valueinstudent.items():print(f{key}:{value})# 遍历嵌套字典forsubject,gradeinstudent[grades].items():print(f{subject}:{grade})5. 字典方法person{name:Alice,age:25,city:NY}# keys() - 返回所有键print(list(person.keys()))# [name, age, city]# values() - 返回所有值print(list(person.values()))# [Alice, 25, NY]# items() - 返回所有键值对print(list(person.items()))# [(name, Alice), (age, 25), (city, NY)]# get() - 安全获取值print(person.get(height,170))# 170# setdefault() - 获取值如果不存在则设置默认值person.setdefault(country,USA)# copy() - 创建浅拷贝person_copyperson.copy()# fromkeys() - 从序列创建字典new_dictdict.fromkeys([a,b,c],0)# {a: 0, b: 0, c: 0}6. 字典推导式# 基本推导式squares{x:x**2forxinrange(1,6)}# {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}# 带条件的推导式even_squares{x:x**2forxinrange(10)ifx%20}# 转换现有字典original{a:1,b:2,c:3}doubled{k:v*2fork,vinoriginal.items()}# 交换键值swapped{v:kfork,vinoriginal.items()}7. 嵌套字典# 嵌套字典示例students{001:{name:Alice,age:22,grades:{math:90,english:85}},002:{name:Bob,age:23,grades:{math:78,english:92}}}# 访问嵌套值print(students[001][name])# Aliceprint(students[002][grades][math])# 78# 修改嵌套值students[001][age]23students[001][grades][history]888. 字典排序# Python 3.7 字典保持插入顺序但有时需要排序scores{Charlie:85,Alice:95,Bob:90}# 按键排序sorted_by_keydict(sorted(scores.items()))# {Alice: 95, Bob: 90, Charlie: 85}# 按值排序sorted_by_valuedict(sorted(scores.items(),keylambdaitem:item[1]))# {Charlie: 85, Bob: 90, Alice: 95}# 按值降序排序sorted_by_value_descdict(sorted(scores.items(),keylambdaitem:item[1],reverseTrue))9. 字典合并# Python 3.5 使用 ** 运算符dict1{a:1,b:2}dict2{b:3,c:4}merged{**dict1,**dict2}# {a: 1, b: 3, c: 4}# Python 3.9 使用 | 运算符mergeddict1|dict2# {a: 1, b: 3, c: 4}# 使用 update() 方法dict1.update(dict2)# dict1 被修改# 使用字典推导式merged{k:vfordin[dict1,dict2]fork,vind.items()}10. 实用示例# 示例1: 单词频率统计defword_frequency(text):wordstext.lower().split()frequency{}forwordinwords:frequency[word]frequency.get(word,0)1returnfrequency textapple banana apple orange banana appleprint(word_frequency(text))# {apple: 3, banana: 2, orange: 1}# 示例2: 配置管理config{database:{host:localhost,port:5432,name:mydb},server:{host:0.0.0.0,port:8000}}# 示例3: 缓存实现classSimpleCache:def__init__(self,max_size100):self.cache{}self.max_sizemax_sizedefget(self,key):returnself.cache.get(key)defset(self,key,value):iflen(self.cache)self.max_size:self.cache.pop(next(iter(self.cache)))self.cache[key]value11. 注意事项# 1. 键必须是不可变类型# 正确的键valid_keys{string:value,123:value,(1,2,3):value}# 错误的键列表不能作为键# invalid {[1, 2]: value} # TypeError# 2. 避免在遍历时修改字典data{a:1,b:2,c:3}# for key in data:# if key b:# del data[key] # RuntimeError# 正确的做法keys_to_remove[]forkeyindata:ifkeyb:keys_to_remove.append(key)forkeyinkeys_to_remove:deldata[key]# 3. 使用 defaultdict 处理缺失键fromcollectionsimportdefaultdict word_countdefaultdict(int)# 默认值为0word_count[apple]1# 不需要检查键是否存在总结Python字典是一种非常高效和灵活的数据结构特别适合存储和查询键值对数据。掌握字典的各种操作和方法能够大大提高编程效率。字典在Python中的应用非常广泛从简单的数据存储到复杂的算法实现都离不开它。