Python遍历字典的三种方法:keys、values与items详解

宋时安
宋时安
发布时间:2026-10-25 | 4人浏览过
原创

遍历字典是 Python 数据处理中最常用的日常操作之一。Python 字典提供了三种核心视图方法:keys()、values() 与 items(),分别对应键、值以及键值对元组的提取与迭代。本文将详细讲解这三种方法的底层机制、操作步骤、代码写法与适用边界,帮助开发者写出更清晰、高效的 Python 代码。

一、字典遍历的底层机制与视图对象

在 Python 3 中,调用 d.keys()、d.values() 和 d.items() 并不是像 Python 2 那样返回一个静态的列表副本,而是返回一种被称为字典视图对象(Dictionary View Objects)的动态结构。视图对象具有两大核心特性:

  • 动态联动:视图直接绑定到原始字典上。若原字典发生增删改,视图中的数据会实时随之变化,不需要重新调用方法。
  • 内存友好:视图不会为所有元素重新分配一个完整的列表内存空间,而是提供惰性迭代能力,即便字典包含数百万条记录,视图本身的内存开销也极小。
Python遍历字典的三种方法:keys、values与items详解
图 1:Python 字典底层内存与三种视图对象的动态映射关系

二、方法一:遍历键(keys() 与直接遍历)

当只需要对字典的“属性名”、“索引标识”或“配置项名称”进行检查与处理时,使用键遍历是最直观的方式。

1. 代码写法与运行机制

在 Python 中,遍历字典的键有两种常见写法:

  • 写法 A(直接遍历字典):for key in student_scores:
  • 写法 B(显式调用 keys()):for key in student_scores.keys():

这两种写法在执行结果上完全一致。Python 字典实现了可迭代协议(__iter__),直接对字典调用 iter(d) 默认产生的就是键迭代器。因此,官方推荐在绝大多数场景下直接使用 for key in d,代码更加精简地道;而在强调返回集合类型或需要明确表达“仅处理键集合”时,使用 d.keys() 意图更明确。

Python 3 代码示例:遍历键
# 环境要求:Python 3.6+
student_scores = {
    "张明": 88,
    "李华": 92,
    "王芳": 95,
    "赵强": 76
}

# 方式 1:直接遍历字典(推荐日常使用)
print("--- 直接遍历字典键 ---")
for student_name in student_scores:
    print(f"学生姓名: {student_name}")

# 方式 2:显式调用 keys() 视图
print("\n--- 显式调用 keys() ---")
for student_name in student_scores.keys():
    print(f"名单项: {student_name}")

# 示例输出(标准控制台):
# --- 直接遍历字典键 ---
# 学生姓名: 张明
# 学生姓名: 李华
# 学生姓名: 王芳
# 学生姓名: 赵强
#
# --- 显式调用 keys() ---
# 名单项: 张明
# 名单项: 李华
# 名单项: 王芳
# 名单项: 赵强
Python遍历字典的三种方法:keys、values与items详解
图 2:隐式直接遍历与显式 keys() 视图调用的执行流程对比
注意事项(避坑提醒): 在遍历 keys() 或字典本身时,严禁在循环体内直接对原字典执行 del、pop() 或新增键值对。因为视图对象实时绑定原字典结构,字典长度的改变会破坏迭代器的状态,并立即触发 RuntimeError: dictionary changed size during iteration。如果确实需要动态删除键,应先将键转换为静态列表:for key in list(d.keys()):。

三、方法二:遍历值(values())

当开发者只关注存储的数据本身,而不需要关心对应的键标签时,使用 values() 是最直接高效的途径。

1. 典型应用场景

  • 数值运算与聚合:例如计算总金额、求平均分、统计极值等。
  • 状态校验:例如检查系统内所有服务模块的状态是否全部为就绪(all())或是否存在失败(any())。
  • 数据去重收集:通过 set(d.values()) 快速提取唯一值集合。
Python 3 代码示例:遍历值与聚合计算
# 示例:统计商场购物车商品总金额与折扣状态
cart_items = {
    "机械键盘": 499.00,
    "人体工学椅": 1280.00,
    "无线鼠标": 129.00,
    "显示器挂灯": 189.00
}

# 1. 纯值遍历
total_price = 0.0
print("--- 购物车单品单价明细 ---")
for price in cart_items.values():
    print(f"价格项: ¥{price:.2f}")
    total_price += price

# 2. 结合 Python 内置函数实现高效聚合
avg_price = total_price / len(cart_items)
max_price = max(cart_items.values())
min_price = min(cart_items.values())

print(f"\n消费总额: ¥{total_price:.2f}")
print(f"商品均价: ¥{avg_price:.2f}")
print(f"单品最高价: ¥{max_price:.2f},单品最低价: ¥{min_price:.2f}")

# 示例输出:
# --- 购物车单品单价明细 ---
# 价格项: ¥499.00
# 价格项: ¥1280.00
# 价格项: ¥129.00
# 价格项: ¥189.00
#
# 消费总额: ¥2097.00
# 商品均价: ¥524.25
# 单品最高价: ¥1280.00,单品最低价: ¥129.00
边界限制: 由于字典允许不同的键存储相同的值(单向哈希映射),values() 返回的值可能包含重复数据,且无法根据遍历出的某个特定 value 快速反向索引到对应的原始 key。若业务逻辑中必须在获取值的同时追溯其所属键,切勿强行通过 values() 循环,而应改用接下来讲解的 items() 方法。

四、方法三:同时遍历键与值(items())

items() 是字典遍历中最全面、最具生产力的方法。它在每次迭代中返回一个形如 (key, value) 的二元组(2-Tuple),结合 Python 的元组解包语法,可以优雅且高效地同时获取键和对应的值。

1. 元组解包(Tuple Unpacking)机制

当执行 for key, val in d.items(): 时,内部经历了两个紧密的步骤:

  1. items() 视图产出一个具体的键值对二元组 (k, v);
  2. Python 虚拟机自动将该元组的第一个元素赋值给循环变量 key,第二个元素赋值给 val。
Python遍历字典的三种方法:keys、values与items详解
图 3:items() 一次性元组解包与遍历键再二次寻址的执行流对比

2. 代码示例:信息格式化与字典推导式

# 示例:服务器健康指标监控字典
server_metrics = {
    "cpu_usage": 78.5,
    "memory_usage": 82.1,
    "disk_io": 45.0,
    "network_drop_rate": 0.02
}

# 1. 遍历键值对并格式化展示
print("--- 服务器状态指标检查 ---")
for metric_name, val in server_metrics.items():
    status = "WARN" if val > 80.0 else "OK"
    print(f"[{status}] {metric_name:<18}: {val:>6.2f}%")

# 2. 结合 items() 编写简洁的字典推导式(过滤告警项)
alert_metrics = {k: v for k, v in server_metrics.items() if v > 80.0}
print("\n需立即处理的告警项字典:")
print(alert_metrics)

# 示例输出:
# --- 服务器状态指标检查 ---
# [OK  ] cpu_usage         :  78.50%
# [WARN] memory_usage      :  82.10%
# [OK  ] disk_io           :  45.00%
# [OK  ] network_drop_rate :   0.02%
#
# 需立即处理的告警项字典:
# {'memory_usage': 82.1}

五、三种遍历方法全景对比与选型指南

为了在实际编码中迅速做出合理选型,下表对三种字典遍历方式的返回值类型、典型使用场景及推荐写法进行了归纳:

遍历方式 返回值 / 视图类型 迭代单元内容 核心应用场景 代码推荐度
for k in d dict 本身迭代器 键(Key) 键的存在性校验、按键分类、精简脚本 ★★★★★(日常首选)
for k in d.keys() dict_keys 视图 键(Key) 集合交并运算、明确表意“纯键集合” ★★★★☆(推荐集合场景)
for v in d.values() dict_values 视图 值(Value) 数据累加、均值计算、状态全量校验 ★★★★★(纯数值运算必选)
for k, v in d.items() dict_items 视图 二元组 (Key, Value) 格式化展示、数据映射转换、字典过滤推导 ★★★★★(需键值联动首选)
Python遍历字典的三种方法:keys、values与items详解
图 4:字典三种遍历方式选型决策与全景总结

六、核心总结

掌握 Python 字典遍历的核心在于按需选择匹配的视图方法:

  • 只关注键名:直接使用 for k in d,简单且符合 Python 社区标准惯用法;当需要集合运算能力时,使用 d.keys()。
  • 只关注数值:使用 for v in d.values(),避免了多余的键解析,代码表意清晰。
  • 键和值同时参与逻辑:始终使用 for k, v in d.items() 进行元组解包,彻底告别 for k in d: v = d[k] 带来的冗余二次哈希查找。

遵循这一原则,不仅能让业务代码逻辑更紧凑清晰,还能在处理大规模数据集时确保运行效率的最优。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表