Python字典遍历案例如何循环读取

wen python案例 27

Python字典遍历案例:如何高效循环读取数据

目录导读

  1. Python字典基础回顾 – 什么是字典与常用结构
  2. 四种核心遍历方法 – keys()、values()、items() 与直接遍历
  3. 实战案例1:学生成绩管理系统 – 遍历字典进行统计
  4. 实战案例2:嵌套字典的深层遍历 – 多层级数据处理
  5. 常见错误与性能优化 – 避免误用与提升效率
  6. 问答环节 – 解决开发者最常遇到的3个问题
  7. 总结与推荐 – 根据场景选择合适的遍历方式

Python字典基础回顾

在Python中,字典(dict)是一种可变容器模型,存储键值对(key-value pairs),与列表不同,字典通过键而非索引来访问数据,典型结构如下:

Python字典遍历案例如何循环读取

student = {"name": "Alice", "age": 20, "grade": "A"}

遍历字典的核心需求有两个:读取键读取值、或同时读取键值对,下面为你系统拆解所有主流遍历方法。


四种核心遍历方法

1 直接遍历字典(默认遍历键)

for key in student:
    print(key)  # 输出:name, age, grade

这是最简洁的方式,但如果你需要同时获取值,需结合 student[key] 使用。

2 使用 keys() 方法遍历所有键

for key in student.keys():
    print(key, student[key])

显式调用 keys() 可提高代码可读性,标明你只关心键。

3 使用 values() 方法遍历所有值

for value in student.values():
    print(value)  # 输出:Alice, 20, A

此法更适用于只需数据不需要键名的场景,例如统计总分或筛选结果。

4 使用 items() 方法同时获取键和值(最推荐)

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

这是Pythonic的标准写法,尤其适合修改或打印一对数据。

SEO优化小贴士:使用 items() 在复杂数据处理中能减少代码量,提高爬取效率,因此被多数Python高级教程推荐。


实战案例1:学生成绩管理系统

假设有一个字典存储班级学生的各科成绩,需要计算每个学生的总分和平均分。

scores = {
    "Alice": {"math": 90, "english": 85, "science": 92},
    "Bob": {"math": 78, "english": 82, "science": 80},
    "Charlie": {"math": 95, "english": 88, "science": 91}
}
for name, subjects in scores.items():
    total = sum(subjects.values())
    avg = total / len(subjects)
    print(f"{name} 总分: {total}, 平均分: {avg:.2f}")

输出结果

Alice 总分: 267, 平均分: 89.00
Bob 总分: 240, 平均分: 80.00
Charlie 总分: 274, 平均分: 91.33

关键点:通过 items() 获取外层键(姓名)和内层字典(科目与分数),再用 values() 提取具体分数,这是遍历嵌套字典的标准模式。


实战案例2:嵌套字典的深层遍历

你是否需要遍历三层甚至更多层级的字典?例如从JSON接口返回的嵌套数据,以下处理一个员工信息结构:

company = {
    "department1": {
        "manager": "Tom",
        "employees": {
            "emp1": {"name": "Lucy", "age": 28},
            "emp2": {"name": "John", "age": 32}
        }
    },
    "department2": {
        "manager": "Jerry",
        "employees": {
            "emp3": {"name": "Mary", "age": 25}
        }
    }
}
# 遍历所有员工的名字和年龄
for dept_name, dept_info in company.items():
    for emp_id, emp_detail in dept_info["employees"].items():
        print(f"{dept_name} - {emp_id}: {emp_detail['name']}, {emp_detail['age']}")

输出

department1 - emp1: Lucy, 28
department1 - emp2: John, 32
department2 - emp3: Mary, 25

注意:当层级过深时,建议使用递归函数自动化遍历,防止代码重复。


常见错误与性能优化

1 错误1:修改字典大小导致崩溃

遍历时删除或添加键会引发 RuntimeError,正确做法是复制键列表后再操作:

for key in list(dict.keys()):
    if condition:
        del dict[key]

2 错误2:意图获取值却只遍历键

for key in dict:
    print(key)  # 你以为是值,其实是键

建议始终用 items() 明确意图。

3 性能优化点

  • 小字典(少于1000项):所有方法差异甚微,选择可读性最高的 items()
  • 大字典(百万级):如需遍历键,用 for key in dict 而非 .keys();如需值,用 for value in dict.values() 可节省内存。
  • 如果只需判断某键是否存在,不要遍历,用 if key in dict

问答环节

Q1:为什么我遍历字典时,输出顺序每次不同? A:在Python 3.7+中,字典保持插入顺序,如果你的Python版本是3.6或更早,则顺序不保证,升级版本或使用 OrderedDict 即可解决。

Q2:如何遍历字典并同时根据条件删除某些项? A:安全做法是创建一个新字典,或者使用字典推导式:

new_dict = {k: v for k, v in dict.items() if condition}

这样可以彻底避免运行时错误。

Q3:当需要遍历嵌套字典并获取所有键的路径时,怎么办? A:推荐使用递归函数,收集路径:

def get_all_keys(d, path=""):
    for k, v in d.items():
        yield f"{path}.{k}" if path else k
        if isinstance(v, dict):
            yield from get_all_keys(v, f"{path}.{k}" if path else k)

总结与推荐

场景 推荐方法 理由
仅需要字典的值 dict.values() 最直接,无键干扰
同时需要键和值 dict.items() 代码简洁,Pythonic
修改字典内容(增删) 先复制 list(dict.items()) 防止运行时错误
处理嵌套多层级 递归 + items() 通用性强

遍历不是目的,数据提取才是,根据业务选择最合适的方法,代码就能既高效又易维护。

掌握了这些实战技巧,你可以轻松应对99%的字典处理场景,现在就去你的代码中用 items() 试一试吧!

抱歉,评论功能暂时关闭!