news 2026/4/18 22:52:47

Python字典操作与应用详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python字典操作与应用详解

Python 字典详解

1. 字典基础

什么是字典?

字典是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() 构造函数dict2=dict(name="Bob",age=30)# 方法3: 从键值对列表创建dict3=dict([("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"]dict5=dict.fromkeys(keys,None)# {'name': None, 'age': None, 'city': None}

3. 常用字典操作

访问元素

person={"name":"Alice","age":25}# 使用键访问print(person["name"])# Alice# 使用 get() 方法(避免 KeyError)print(person.get("age"))# 25print(person.get("height","Not found"))# 默认值: Not found# 检查键是否存在print("name"inperson)# Trueprint("height"inperson)# 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() 删除并返回值age=person.pop("age")# 返回 25# 使用 popitem() 删除最后一个键值对(Python 3.7+)item=person.popitem()# 返回 ('name', 'Alice')# 清空字典person.clear()# 删除整个字典delperson

4. 字典遍历

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_copy=person.copy()# fromkeys() - 从序列创建字典new_dict=dict.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%2==0}# 转换现有字典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"]=88

8. 字典排序

# Python 3.7+ 字典保持插入顺序,但有时需要排序scores={"Charlie":85,"Alice":95,"Bob":90}# 按键排序sorted_by_key=dict(sorted(scores.items()))# {'Alice': 95, 'Bob': 90, 'Charlie': 85}# 按值排序sorted_by_value=dict(sorted(scores.items(),key=lambdaitem:item[1]))# {'Charlie': 85, 'Bob': 90, 'Alice': 95}# 按值降序排序sorted_by_value_desc=dict(sorted(scores.items(),key=lambdaitem:item[1],reverse=True))

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+ 使用 | 运算符merged=dict1|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):words=text.lower().split()frequency={}forwordinwords:frequency[word]=frequency.get(word,0)+1returnfrequency text="apple banana apple orange banana apple"print(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_size=100):self.cache={}self.max_size=max_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]=value

11. 注意事项

# 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:ifkey=="b":keys_to_remove.append(key)forkeyinkeys_to_remove:deldata[key]# 3. 使用 defaultdict 处理缺失键fromcollectionsimportdefaultdict word_count=defaultdict(int)# 默认值为0word_count["apple"]+=1# 不需要检查键是否存在

总结

Python字典是一种非常高效和灵活的数据结构,特别适合存储和查询键值对数据。掌握字典的各种操作和方法,能够大大提高编程效率。字典在Python中的应用非常广泛,从简单的数据存储到复杂的算法实现都离不开它。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 4:54:52

CCMusic模型压缩实战:INT8量化后ResNet50精度仅下降1.2%的部署方案

CCMusic模型压缩实战:INT8量化后ResNet50精度仅下降1.2%的部署方案 1. 为什么需要为CCMusic做模型压缩 你有没有遇到过这样的情况:在本地跑通了一个音乐风格分类模型,效果不错,但一想把它部署到边缘设备上——比如树莓派、Jetso…

作者头像 李华
网站建设 2026/4/15 9:10:37

DAMO-YOLO惊艳效果:UI动态神经突触加载动画与模型加载耗时精确匹配

DAMO-YOLO惊艳效果:UI动态神经突触加载动画与模型加载耗时精确匹配 1. 什么是DAMO-YOLO智能视觉探测系统 你有没有试过等一个AI模型加载——看着进度条一动不动,心里默数三秒、五秒、八秒……最后忍不住刷新页面? DAMO-YOLO不是这样。它把“…

作者头像 李华
网站建设 2026/4/16 16:48:48

无需GPU专家!Hunyuan-MT-7B-WEBUI一键推理真省心

无需GPU专家!Hunyuan-MT-7B-WEBUI一键推理真省心 你有没有过这样的经历:手头有个急需翻译的PDF技术文档,但在线翻译工具翻得生硬、漏译专有名词;想本地部署一个开源翻译模型,结果卡在CUDA版本不匹配、transformers报错…

作者头像 李华
网站建设 2026/4/18 20:11:25

YOLO11图像大小怎么设?640是最佳选择吗

YOLO11图像大小怎么设?640是最佳选择吗 你是不是也遇到过这样的困惑:训练YOLO11时,imgsz640这个参数像空气开关一样无处不在——文档里写它,示例代码用它,镜像默认值还是它。但当你把一张20481536的工业检测图直接缩放…

作者头像 李华
网站建设 2026/4/19 6:06:16

WAN2.2文生视频实战:用SDXL_Prompt风格轻松制作高质量动画

WAN2.2文生视频实战:用SDXL_Prompt风格轻松制作高质量动画 1. 为什么WAN2.2SDXL_Prompt是当前最友好的文生视频组合 你有没有试过输入一段文字,等了两分钟,结果生成的视频要么动作僵硬,要么画面模糊,甚至人物五官都错…

作者头像 李华
网站建设 2026/4/17 12:35:18

OFA视觉蕴含模型部署教程:Docker镜像构建与生产环境部署

OFA视觉蕴含模型部署教程:Docker镜像构建与生产环境部署 1. 这不是普通图像识别,而是“看图懂话”的能力 你有没有遇到过这样的问题:一张商品图配了一段文字描述,但实际点开发现图里根本没有文字说的东西?或者短视频…

作者头像 李华