跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

Python3 字典详解:创建、操作与最佳实践

综述由AI生成Python 字典是存储键值对的可变容器,键必须唯一且不可变,值可为任意类型。字典的多种创建方式(字面量、dict 函数、fromkeys),访问与修改操作(索引、get、update),删除方法(del、pop、clear),以及内置函数和方法(keys、values、items、copy)。此外还涵盖了字典推导式、遍历技巧、键的哈希性约束、性能分析及常见编程陷阱,提供了完整的 Python 字典使用指南。

古灵精怪发布于 2025/2/6更新于 2026/6/433 浏览
Python3 字典详解:创建、操作与最佳实践

Python3 字典详解

1. 概述

字典(Dictionary)是 Python 中另一种可变容器模型,可存储任意类型对象。它是 Python 中最常用的数据结构之一,用于存储键值对(Key-Value Pair)。

字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号 (,) 分割,整个字典包括在花括号 {} 中。在 Python 3.7 及更高版本中,字典保持插入顺序。

d = {key1: value1, key2: value2, key3: value3}

注意: dict 是 Python 的关键字和内置函数,变量名不建议命名为 dict,以免覆盖内置功能。

核心特性

  1. 键唯一性:键必须是唯一的。如果同一个键被赋值两次,后一个值会被记住。
  2. 键不可变:键必须是不可变的类型,如字符串、数字或元组。列表、字典等可变类型不能作为键。
  3. 值任意性:值可以取任何数据类型,且不必唯一。
  4. 无序性(旧版):在 Python 3.6 之前,字典是无序的;3.7+ 版本保证插入顺序。

一个简单的字典实例:

tinydict = {'name': 'runoob', 'likes': 123, 'url': 'www.runoob.com'}

2. 创建字典

2.1 使用大括号 {}

这是最常用的创建方式。

# 创建非空字典
person = {'name': 'Alice', 'age': 25, 'city': 'Beijing'}

# 创建空字典
empty_dict = {}
print(empty_dict)  # 输出:{}
print(type(empty_dict))  # 输出:<class 'dict'>

2.2 使用内建函数 dict()

可以通过关键字参数或可迭代对象创建字典。

# 通过关键字参数创建
dict1 = dict(name='Bob', age=30)
print(dict1)  # 输出:{'name': 'Bob', 'age': 30}

# 通过可迭代对象(列表/元组)创建
list_pairs = [('x', 1), ('y', 2)]
dict2 = dict(list_pairs)
print(dict2)  # 输出:{'x': 1, 'y': 2}

# 创建空字典
emptyDict = dict()
print(len(emptyDict))  # 输出:0

2.3 使用 fromkeys() 方法

创建一个新字典,以指定序列为键,值为默认值。

keys = ['a', 'b', 'c']
default_value = 0
new_dict = dict.fromkeys(keys, default_value)
print(new_dict)  # 输出:{'a': 0, 'b': 0, 'c': 0}

3. 访问与修改字典

3.1 访问字典里的值

将相应的键放入到方括号中。如果键不存在,直接访问会抛出 KeyError。

tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}

# 正常访问
print(tinydict['Name'])  # 输出:Runoob

# 访问不存在的键会报错
# print(tinydict['Alice'])  # KeyError: 'Alice'

为了安全访问,推荐使用 .get() 方法,它允许设置默认返回值。

value = tinydict.get('Alice', 'Not Found')
print(value)  # 输出:Not Found

3.2 修改与添加元素

向字典添加新内容的方法是增加新的键/值对,修改或删除已有键/值对如下:

tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}

# 更新现有键的值
tinydict['Age'] = 8

# 添加新键值对
tinydict['School'] = "菜鸟教程"

print(tinydict)  # 输出:{'Name': 'Runoob', 'Age': 8, 'Class': 'First', 'School': '菜鸟教程'}

3.3 使用 update() 合并字典

可以将另一个字典的内容合并到当前字典中。

d1 = {'a': 1, 'b': 2}
d2 = {'b': 3, 'c': 4}
d1.update(d2)
print(d1)  # 输出:{'a': 1, 'b': 3, 'c': 4} (b 被覆盖)

在 Python 3.9+ 中,也可以使用 | 运算符进行合并:

d3 = d1 | d2

4. 删除字典元素

能删单一的元素也能清空字典,清空只需一项操作。

4.1 显式删除单个键

使用 del 命令。

tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
del tinydict['Name']  # 删除键 'Name'
print(tinydict)  # 输出:{'Age': 7, 'Class': 'First'}

4.2 使用 pop() 删除并返回值

移除给定键并返回该键对应的值。如果键不存在,可选提供默认值。

val = tinydict.pop('Age')
print(val)  # 输出:7

4.3 使用 popitem() 删除最后一个键值对

随机删除(在 3.7+ 中按插入顺序最后)一个键值对并返回元组。

item = tinydict.popitem()
print(item)  # 输出:('Class', 'First')

4.4 清空字典

使用 .clear() 方法保留字典对象但移除所有项。

tinydict.clear()
print(tinydict)  # 输出:{}

4.5 删除整个字典对象

使用 del 语句。

del tinydict
# 此时再访问 tinydict 会引发 NameError

5. 字典内置函数与方法

5.1 常用内置函数

  • len(dict):返回字典长度。
  • str(dict):转换为字符串表示。
  • type(dict):返回对象类型。

5.2 常用方法

  • .keys():返回字典的所有键视图。
  • .values():返回字典的所有值视图。
  • .items():返回字典的所有键值对视图。
  • .copy():浅拷贝字典。
  • .setdefault(key, default):如果键存在返回值,否则设置键并返回默认值。
d = {'a': 1, 'b': 2}

# keys, values, items
print(list(d.keys()))   # ['a', 'b']
print(list(d.values())) # [1, 2]
print(list(d.items()))  # [('a', 1), ('b', 2)]

# setdefault
result = d.setdefault('c', 3)
print(result)  # 3
print(d)       # {'a': 1, 'b': 2, 'c': 3}

# copy
d_copy = d.copy()

6. 字典推导式

字典推导式提供了一种简洁的方式来创建字典。

# 基本推导式
squares = {x: x**2 for x in range(5)}
print(squares)  # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

# 带条件
evens = {x: x*2 for x in range(10) if x % 2 == 0}
print(evens)    # {0: 0, 2: 4, 4: 8, 6: 12, 8: 16}

7. 遍历字典

7.1 遍历键

for key in d:
    print(key)

7.2 遍历键值对

for key, value in d.items():
    print(f"{key}: {value}")

7.3 注意事项

不要在遍历字典时修改其大小,这可能导致 RuntimeError。

8. 键的约束与哈希性

字典值可以是任何的 Python 对象,既可以是标准的对象,也可以是用户定义的,但键不行。

两个重要的点需要记住:

  1. 不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住。
tinydict = {'Name': 'Runoob', 'Age': 7, 'Name': '小菜鸟'}
print(tinydict['Name'])  # 输出:小菜鸟
  1. 键必须不可变。所以可以用数字,字符串或元组充当,而用列表就不行。
# 错误示例
try:
    bad_dict = {['Name']: 'Runoob'}
except TypeError as e:
    print(e)  # unhashable type: 'list'

# 正确示例:使用元组作为键
valid_dict = {('Name', 'First'): 'Runoob'}

9. 性能与最佳实践

9.1 时间复杂度

  • 查找、插入、删除的平均时间复杂度为 O(1)。
  • 这使得字典在处理大量数据查找时比列表更高效。

9.2 内存占用

字典比列表占用更多内存,因为需要维护哈希表结构。对于简单计数场景,可以使用 collections.Counter。

9.3 常见陷阱

  1. 可变默认参数:在函数定义中避免使用字典作为默认参数。
# 错误
def add_item(item, list_arg=[]):
    list_arg.append(item)
    return list_arg

# 正确
def add_item(item, list_arg=None):
    if list_arg is None:
        list_arg = []
    list_arg.append(item)
    return list_arg
  1. 浮点数作为键:由于浮点数精度问题,不建议直接使用浮点数作为键。

10. 总结

Python 字典是处理键值映射关系的核心工具。掌握其创建、访问、修改、删除以及常用方法,能够显著提高代码效率和可读性。在实际开发中,应充分利用字典的 O(1) 查找特性,并注意键的不可变性要求。

目录

  1. Python3 字典详解
  2. 1. 概述
  3. 核心特性
  4. 2. 创建字典
  5. 2.1 使用大括号 {}
  6. 创建非空字典
  7. 创建空字典
  8. 2.2 使用内建函数 dict()
  9. 通过关键字参数创建
  10. 通过可迭代对象(列表/元组)创建
  11. 创建空字典
  12. 2.3 使用 fromkeys() 方法
  13. 3. 访问与修改字典
  14. 3.1 访问字典里的值
  15. 正常访问
  16. 访问不存在的键会报错
  17. print(tinydict['Alice']) # KeyError: 'Alice'
  18. 3.2 修改与添加元素
  19. 更新现有键的值
  20. 添加新键值对
  21. 3.3 使用 update() 合并字典
  22. 4. 删除字典元素
  23. 4.1 显式删除单个键
  24. 4.2 使用 pop() 删除并返回值
  25. 4.3 使用 popitem() 删除最后一个键值对
  26. 4.4 清空字典
  27. 4.5 删除整个字典对象
  28. 此时再访问 tinydict 会引发 NameError
  29. 5. 字典内置函数与方法
  30. 5.1 常用内置函数
  31. 5.2 常用方法
  32. keys, values, items
  33. setdefault
  34. copy
  35. 6. 字典推导式
  36. 基本推导式
  37. 带条件
  38. 7. 遍历字典
  39. 7.1 遍历键
  40. 7.2 遍历键值对
  41. 7.3 注意事项
  42. 8. 键的约束与哈希性
  43. 错误示例
  44. 正确示例:使用元组作为键
  45. 9. 性能与最佳实践
  46. 9.1 时间复杂度
  47. 9.2 内存占用
  48. 9.3 常见陷阱
  49. 错误
  50. 正确
  51. 10. 总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • RexUniNLU 零样本 NLU 教程:WebUI 文件上传与 NER 可视化
  • SpringBoot+Vue+Netty+WebSocket+WebRTC 视频聊天实现
  • Retinaface+CurricularFace 镜像 Python 3.11.14 安全补丁升级方法
  • ChatGPT 如何利用结构化实现高效信息管理
  • 网络安全行业薪资分析与职业发展路径指南
  • SpringBoot 整合 Neo4j 图数据库项目实战详解
  • Whisper 本地部署与使用指南
  • Python AI 入门指南:从线性回归到图像分类
  • 国内公共安全领域首个警用 AI 助手“天擎”发布
  • 开源 AI 编程工具选型对比:OpenCode 与 GitHub Copilot
  • RuoYi Office 开源 OA、HRM、CRM、ERP 一体化系统部署指南
  • OSCP 实战:获取并破解 Net-NTLMv2 哈希(下)
  • GPT-4o 为何免费开放?技术突破与商业逻辑解析
  • 面向 C++ 开发的 Web 自动化测试入门:从概念到 Selenium 实战
  • Python 绘图基础:matplotlib 库常用功能详解
  • AIClient-2-API 使用指南:快速接入 AI 模型
  • AgentScope Java 实战:构建 AI 奶茶店应用
  • MySQL 数据导入导出与表结构管理核心操作指南
  • Stable Diffusion 2024:技术突破与商业落地的开源实践
  • Python 智能 PDF 文档助手开发指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online