Python 遍历字典的 8 种常用方法
遍历字典是 Python 开发中的基础且高频操作,能够灵活访问键(Key)和值(Value),从而执行数据筛选、转换或统计等任务。本文将详细介绍 8 种遍历字典的方法,包括基础循环、内置方法、推导式及迭代器技巧,并结合性能与最佳实践进行分析。
本文详细解析了 Python 遍历字典的 8 种主流方法,涵盖基础 for 循环、keys/values/items 方法、推导式、enumerate 索引遍历、迭代器及回调函数等。针对 Python 2 与 3 的差异做了说明,并补充了性能对比与常见陷阱(如遍历时修改字典)。通过实际代码示例与最佳实践建议,帮助开发者根据场景选择最高效的遍历方案,提升代码质量与执行效率。

遍历字典是 Python 开发中的基础且高频操作,能够灵活访问键(Key)和值(Value),从而执行数据筛选、转换或统计等任务。本文将详细介绍 8 种遍历字典的方法,包括基础循环、内置方法、推导式及迭代器技巧,并结合性能与最佳实践进行分析。
使用 for 循环是最直观的方式。默认情况下,直接遍历字典对象会获取其键(Keys)。
student_grades = {"Alice": 95, "Bob": 88, "Charlie": 92, "David": 78}
# 遍历字典的键(默认行为)
for name in student_grades:
print(name)
# 遍历字典的值
for grade in student_grades.values():
print(grade)
# 遍历字典的键值对
for name, grade in student_grades.items():
print(f"{name}: {grade}")
适用场景: 通用性强,适用于绝大多数需要访问键、值或键值对的场景。
items() 方法返回一个包含 (key, value) 元组的视图对象,配合解包语法可清晰获取键值对。
student_grades = {"Alice": 95, "Bob": 88, "Charlie": 92, "David": 78}
for name, grade in student_grades.items():
print(f"学生{name}的成绩为{grade}")
注意: 在 Python 3 中,items() 返回的是动态视图,若字典内容在遍历过程中发生变化,可能会抛出异常或行为未定义。
分别获取键集合或值集合进行独立遍历。
student_grades = {"Alice": 95, "Bob": 88, "Charlie": 92, "David": 78}
# 仅遍历键
for name in student_grades.keys():
print(name)
# 仅遍历值
for grade in student_grades.values():
print(grade)
适用场景: 当只需要处理键或只需要处理值时,语义更明确。
利用推导式可以在遍历的同时生成新字典,常用于数据过滤或转换。
student_grades = {"Alice": 95, "Bob": 88, "Charlie": 92, "David": 78}
# 创建新字典,只保留成绩大于 90 的学生
top_students = {name: grade for name, grade in student_grades.items() if grade > 90}
print(top_students)
优势: 代码简洁,一行即可完成过滤与构建。
enumerate() 提供索引计数,适用于需要记录元素顺序或位置的场景。
student_grades = {"Alice": 95, "Bob": 88, "Charlie": 92, "David": 78}
for index, (name, grade) in enumerate(student_grades.items()):
print(f"排名#{index + 1}: {name} - {grade}")
注意: 字典在 Python 3.7+ 保持插入顺序,但旧版本无序,索引含义需谨慎。
在 Python 2.x 中,iteritems() 返回迭代器,节省内存。但在 Python 3.x 中已废弃,items() 本身即为迭代器。
# Python 2 示例(不推荐在现代项目中使用)
# for name, grade in student_grades.iteritems():
# print(name, grade)
建议: 现代开发请直接使用 items(),无需考虑此方法。
通过 iter() 和 next() 手动控制迭代过程,适合需要精细控制流程的场景。
student_grades = {"Alice": 95, "Bob": 88, "Charlie": 92, "David": 78}
iterator = iter(student_grades)
try:
while True:
key = next(iterator)
print(f"Key: {key}, Value: {student_grades[key]}")
except StopIteration:
pass
特点: 灵活性高,但代码冗长,通常用于特殊流式处理。
将遍历逻辑封装,通过回调函数实现业务解耦。
student_grades = {"Alice": 95, "Bob": 88, "Charlie": 92, "David": 78}
def process_student(name, grade):
if grade >= 90:
print(f"表扬:{name}")
else:
print(f"加油:{name}")
for name, grade in student_grades.items():
process_student(name, grade)
优势: 便于复用逻辑,符合单一职责原则。
items()、keys()、values() 在 Python 3 中返回视图对象,内存占用低。切勿在遍历字典的同时删除或添加键,否则可能引发 RuntimeError。
# 错误示范
# for k in my_dict:
# del my_dict[k]
# 正确做法:先收集要删除的键
keys_to_delete = [k for k in my_dict if condition(k)]
for k in keys_to_delete:
del my_dict[k]
for k in dict 或 items()。Python 提供了丰富的字典遍历手段。开发者应根据具体需求(如是否需要索引、是否需生成新结构、性能要求)选择合适的方法。掌握这些技巧有助于编写更健壮、高效的 Python 代码。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online