Python中如何遍历字典?五种常用方法详解

来源:安卓APP网作者:长沙GEO公司头衔:草根站长
导读:本期聚焦于小伙伴创作的《Python中如何遍历字典?五种常用方法详解》,敬请观看详情。直接通过for循环对字典对象迭代,默认只能拿到键,若想同时取键值往往让人困惑。实际上Python字典提供了keys、values、items三个视图方法,配合枚举还能获取索引。不同遍历方式在内存占用与可读性上有差异:items一次性返回键值对视图,避免重复查询;直接遍历键后再下标访问则多一次哈希查找。理清这些方法的返回类型与底层行为,才能在大字典场景下写出高效且清晰的代码。

在Python开发里,字典是最常用的数据结构之一。无论是解析JSON配置、缓存计算结果,还是统计词频,都离不开对字典的遍历操作。理解各种遍历方式的区别,有助于写出更可读也更高效的代码。

Python中如何遍历字典?五种常用方法详解

一、直接遍历字典对象

最常见的写法就是直接把字典放进for循环。此时迭代变量拿到的是字典的键,而不是键值对。这种方式语法最简单,适合只需要键的场景,比如判断某个键是否存在于另一组逻辑中。

从底层看,字典对象实现了迭代协议,默认迭代器返回的是keys视图的迭代器。因此下面两段代码是等价的,但第一种更简洁。如果你的业务逻辑只关心键,就没有必要额外调用keys方法,减少一层函数调用。

user = {'name': '张三', 'age': 28, 'city': '北京'}

# 直接遍历,item是键
for item in user:
    print(item, user[item])

# 等价于显式调用keys
for k in user.keys():
    print(k, user[k])

二、使用values方法遍历值

当你只关心字典中存储的数据而不需要知道对应的键时,可以调用values方法。它返回一个视图对象,动态反映字典的变化,遍历时直接拿到值,省去了通过键再次查找的开销。

需要注意的是,values视图不支持索引,因为它是基于哈希表动态生成的。如果你需要同时获取值和位置,可以配合enumerate使用。下面的例子演示了如何统计所有数值类型的总和,并输出每个值的序号。

scores = {'语文': 90, '数学': 95, '英语': 88}

for val in scores.values():
    print(val)

# 带序号遍历
for idx, val in enumerate(scores.values(), start=1):
    print(f'第{idx}门成绩: {val}')

三、使用items方法遍历键值对

items方法是实际开发中最推荐的遍历方式。它返回包含键值对的视图,每次迭代直接解包成两个变量,既清晰又避免了重复哈希查询,在性能和大字典可读性上都有优势。

在Python 3中,items返回的是字典视图而非列表,不会一次性复制所有数据到内存,这对万级以上的字典尤为重要。下面示例展示如何同时修改值并收集符合条件的键,逻辑一目了然。

stock = {'apple': 10, 'banana': 0, 'orange': 5}
out_of_stock = []

for fruit, count in stock.items():
    if count == 0:
        out_of_stock.append(fruit)
    else:
        stock[fruit] = count - 1

print(out_of_stock)

四、使用enumerate配合items获取索引

有些场景需要记录键值对在遍历中的顺序位置,例如生成报表序号或批量写入数据库时构造参数。这时可以将items返回的视图传给enumerate,同时拿到索引和键值对。

注意字典在Python 3.7之后保证插入顺序,因此索引和插入次序一致。以下代码把配置项转换成带行号的展示文本,方便前端表格渲染。相比手动维护计数器,enumerate让代码更健壮。

config = {'host': '127.0.0.1', 'port': 8080, 'debug': True}

for row_num, (key, value) in enumerate(config.items(), start=1):
    print(f'行{row_num}: {key} = {value}')

五、遍历时修改字典的注意事项

在遍历字典的过程中直接增删原字典的键,会触发运行时错误或者跳过元素。Python不允许在字典迭代期间改变其大小,这是为了防止哈希表结构在迭代中失效。

如果必须边遍历边删除,正确做法是用list包装keys视图生成副本,或者把待删键收集起来后再统一删除。下面示例展示如何安全移除值小于零的条目,既符合语言规范也不损失性能。

data = {'a': 1, 'b': -2, 'c': 3, 'd': -5}
to_remove = [k for k, v in data.items() if v < 0]

for k in to_remove:
    del data[k]

print(data)

六、方法对比与选型建议

为了更直观地选择合适的方法,我们从可读性、内存、适用场景三个维度做对比。直接遍历适合仅用键;values适合聚合计算;items是通用首选;enumerate加items适合需序号的导出任务。

下表列出了五种方式的差异,开发时可根据数据规模与业务诉求权衡。对于超大数据集,优先使用视图方法而非转换为列表,以免占用双倍内存。

遍历方式返回内容典型场景
直接for d键存在性判断
d.values()求和、筛选值
d.items()键值对通用遍历修改
enumerate(d)索引+键带序号处理
enumerate(d.items())索引+键值对导出报表

综上所述,Python字典遍历并不复杂,核心是根据需要选取合适的视图方法。养成使用items的习惯,不仅能减少bug,也让代码意图更明确,便于后续维护。

Python字典遍历items方法修改时间:2026-08-04 20:30:14

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。