开篇这篇解决什么问题列表适合存“一组同类数据”比如一批任务名、一组文件名、一串用户名称。但如果我要描述一个用户只写成列表就不太直观user [lunzi, active, 7]这段代码能跑但过几天再看很容易忘记active和7分别代表什么。字典更适合这种场景user { username: lunzi, status: active, task_count: 7, }这样一看就清楚左边是字段名右边是具体值。我自己在工作里理解字典时最早也是从“配置项”和“用户信息”这类场景开始的。只要数据开始有字段、有状态、有层级字典就会变得很自然。本篇你会学到什么如何创建字典并通过键访问对应的值如何添加、修改、删除字典里的键值对items()、keys()、values()分别适合什么遍历场景如何理解字典列表、字典中存列表、字典中存字典常见的KeyError怎么排查什么时候适合用get()场景案例维护一份用户信息表这一篇不用外星人、比萨这些例子做主线我们换成更贴近实际工作的场景维护一份简单的用户信息表。假设我们要记录用户的基础信息、状态、权限和最近处理的任务可以先从一个用户开始user { username: alice, role: admin, status: active, task_count: 5, } print(user[username]) print(user[role])这就是字典最核心的用法用一个明确的“键”找到对应的“值”。如果后续用户信息变多我们可以把多个字典放进列表里users [ {username: alice, role: admin, status: active}, {username: bob, role: developer, status: inactive}, {username: charlie, role: tester, status: active}, ] for user in users: print(user[username] - user[status])这类结构在实际脚本里很常见一组用户、一组任务、一组配置、一组接口返回数据都可以这样组织。知识点拆解1. 创建字典字典使用{}表示里面是一组键值对user { username: alice, role: admin, status: active, }可以把它理解成一张小表键值usernamealiceroleadminstatusactive键通常用字符串值可以是字符串、数字、列表、另一个字典等。2. 访问字典中的值访问字典时用字典名[键]user { username: alice, role: admin, task_count: 5, } print(user[username]) print(user[task_count])输出结果alice 5这个写法很直接但有一个前提这个键必须存在。如果键不存在就会报KeyError。3. 添加键值对字典可以在创建之后继续添加内容user { username: alice, role: admin, } user[status] active user[task_count] 5 print(user)这在写脚本时很常见先拿到一部分信息后面再补充状态、统计结果或处理结果。4. 修改字典中的值修改字典也使用同样的写法user { username: alice, status: active, } user[status] inactive print(user[status])如果把字典看成一份用户档案修改值就像更新用户状态。5. 删除键值对删除字典里的某个字段用deluser { username: alice, role: admin, temporary_token: abc123, } del user[temporary_token] print(user)注意del删除后这个键值对就没有了。后面如果还访问user[temporary_token]会报错。6. 遍历所有键值对items()如果想把字典里的键和值都拿出来用items()user { username: alice, role: admin, status: active, } for key, value in user.items(): print(key : value)输出结果username: alice role: admin status: active这个方法适合做配置检查、日志输出、字段展示。7. 遍历所有键keys()如果只关心有哪些字段可以遍历键user { username: alice, role: admin, status: active, } for key in user.keys(): print(key)其实直接写for key in user:也可以默认遍历的就是键for key in user: print(key)初学阶段建议先写清楚一点用keys()更容易看出意图。8. 遍历所有值values()如果只关心值用values()favorite_languages { alice: python, bob: java, charlie: python, } for language in favorite_languages.values(): print(language)如果想去重可以配合set()for language in set(favorite_languages.values()): print(language)这里set()会把重复的值合并掉。比如多个用户都喜欢 Python最后只显示一次。9. 字典列表一组结构相似的数据当你有多个用户每个用户都有自己的字段时可以使用“列表中存字典”users [ {username: alice, role: admin, status: active}, {username: bob, role: developer, status: inactive}, {username: charlie, role: tester, status: active}, ] for user in users: if user[status] active: print(user[username] is active.)这类结构在实际工作里非常常见。比如批量用户信息批量任务列表批量订单数据批量接口返回结果10. 字典中存列表一个字段对应多个值有时候一个字段不是单个值而是一组值。比如一个用户可以有多个权限user { username: alice, permissions: [read, write, delete], } print(user[username] has permissions:) for permission in user[permissions]: print(- permission)这比写成permission1、permission2、permission3更清楚也更方便循环处理。11. 字典中存字典更复杂的结构化数据如果每个用户还有更详细的信息可以把字典嵌套在字典里users { alice: { role: admin, status: active, location: beijing, }, bob: { role: developer, status: inactive, location: shanghai, }, } for username, info in users.items(): print(username) print( role: info[role]) print( status: info[status]) print( location: info[location])嵌套结构不要一开始就写得太复杂。我的习惯是先看数据要表达什么再决定用列表还是字典。如果只是“一组值”优先列表如果是“一个对象的多个属性”优先字典如果是“一组对象”通常就是列表里放字典。初学者容易踩的坑问题常见原因建议KeyError访问了不存在的键先用in判断或者用get()分不清键和值不知道该遍历keys()还是values()要字段名用keys()要字段值用values()两个都要用items()嵌套结构看不懂列表和字典混在一起先一层一层看外层是什么内层是什么直接赋值导致联动修改两个变量指向同一个字典需要复制时用copy()复杂结构再考虑deepcopy字典结构太随意每条数据字段不统一同一批数据尽量保持相同字段KeyError怎么排查这是字典里最常见的错误user { username: alice, role: admin, } print(user[status])因为status不存在所以会报错。更稳一点的写法是if status in user: print(user[status]) else: print(status is missing)也可以用get()status user.get(status, unknown) print(status)get()的第二个参数是默认值。键不存在时不会报错而是返回默认值。工作里能怎么用字典在工作里特别常见因为很多业务数据天然就是键值对。场景字典可以怎么用配置文件存接口地址、超时时间、重试次数用户信息存用户名、角色、状态、权限任务管理存任务名称、负责人、截止时间、执行状态接口数据JSON 转成 Python 后通常就是字典或列表嵌套字典日志统计用字段保存次数、状态、耗时等结果举个更贴近脚本的小例子task { name: daily_report, owner: alice, status: pending, retry_count: 0, } if task[status] pending: print(Run task: task[name]) task[status] running这个例子不复杂但已经能体现字典的价值它让一条任务数据变得更清楚也更容易扩展。小结字典用来保存键值对适合表达“一个对象的多个属性”访问字典用dict[key]但键不存在时会报KeyError添加和修改都使用dict[key] value删除键值对用del dict[key]遍历键值对用items()遍历键用keys()遍历值用values()一组对象可以用“列表中存字典”一个字段有多个值可以用“字典中存列表”更复杂的数据可以用“字典中存字典”但不要一开始就嵌套太深
《Python编程 从入门到实践》第6章:字典创建、遍历与嵌套用法详解
发布时间:2026/6/30 7:03:20
开篇这篇解决什么问题列表适合存“一组同类数据”比如一批任务名、一组文件名、一串用户名称。但如果我要描述一个用户只写成列表就不太直观user [lunzi, active, 7]这段代码能跑但过几天再看很容易忘记active和7分别代表什么。字典更适合这种场景user { username: lunzi, status: active, task_count: 7, }这样一看就清楚左边是字段名右边是具体值。我自己在工作里理解字典时最早也是从“配置项”和“用户信息”这类场景开始的。只要数据开始有字段、有状态、有层级字典就会变得很自然。本篇你会学到什么如何创建字典并通过键访问对应的值如何添加、修改、删除字典里的键值对items()、keys()、values()分别适合什么遍历场景如何理解字典列表、字典中存列表、字典中存字典常见的KeyError怎么排查什么时候适合用get()场景案例维护一份用户信息表这一篇不用外星人、比萨这些例子做主线我们换成更贴近实际工作的场景维护一份简单的用户信息表。假设我们要记录用户的基础信息、状态、权限和最近处理的任务可以先从一个用户开始user { username: alice, role: admin, status: active, task_count: 5, } print(user[username]) print(user[role])这就是字典最核心的用法用一个明确的“键”找到对应的“值”。如果后续用户信息变多我们可以把多个字典放进列表里users [ {username: alice, role: admin, status: active}, {username: bob, role: developer, status: inactive}, {username: charlie, role: tester, status: active}, ] for user in users: print(user[username] - user[status])这类结构在实际脚本里很常见一组用户、一组任务、一组配置、一组接口返回数据都可以这样组织。知识点拆解1. 创建字典字典使用{}表示里面是一组键值对user { username: alice, role: admin, status: active, }可以把它理解成一张小表键值usernamealiceroleadminstatusactive键通常用字符串值可以是字符串、数字、列表、另一个字典等。2. 访问字典中的值访问字典时用字典名[键]user { username: alice, role: admin, task_count: 5, } print(user[username]) print(user[task_count])输出结果alice 5这个写法很直接但有一个前提这个键必须存在。如果键不存在就会报KeyError。3. 添加键值对字典可以在创建之后继续添加内容user { username: alice, role: admin, } user[status] active user[task_count] 5 print(user)这在写脚本时很常见先拿到一部分信息后面再补充状态、统计结果或处理结果。4. 修改字典中的值修改字典也使用同样的写法user { username: alice, status: active, } user[status] inactive print(user[status])如果把字典看成一份用户档案修改值就像更新用户状态。5. 删除键值对删除字典里的某个字段用deluser { username: alice, role: admin, temporary_token: abc123, } del user[temporary_token] print(user)注意del删除后这个键值对就没有了。后面如果还访问user[temporary_token]会报错。6. 遍历所有键值对items()如果想把字典里的键和值都拿出来用items()user { username: alice, role: admin, status: active, } for key, value in user.items(): print(key : value)输出结果username: alice role: admin status: active这个方法适合做配置检查、日志输出、字段展示。7. 遍历所有键keys()如果只关心有哪些字段可以遍历键user { username: alice, role: admin, status: active, } for key in user.keys(): print(key)其实直接写for key in user:也可以默认遍历的就是键for key in user: print(key)初学阶段建议先写清楚一点用keys()更容易看出意图。8. 遍历所有值values()如果只关心值用values()favorite_languages { alice: python, bob: java, charlie: python, } for language in favorite_languages.values(): print(language)如果想去重可以配合set()for language in set(favorite_languages.values()): print(language)这里set()会把重复的值合并掉。比如多个用户都喜欢 Python最后只显示一次。9. 字典列表一组结构相似的数据当你有多个用户每个用户都有自己的字段时可以使用“列表中存字典”users [ {username: alice, role: admin, status: active}, {username: bob, role: developer, status: inactive}, {username: charlie, role: tester, status: active}, ] for user in users: if user[status] active: print(user[username] is active.)这类结构在实际工作里非常常见。比如批量用户信息批量任务列表批量订单数据批量接口返回结果10. 字典中存列表一个字段对应多个值有时候一个字段不是单个值而是一组值。比如一个用户可以有多个权限user { username: alice, permissions: [read, write, delete], } print(user[username] has permissions:) for permission in user[permissions]: print(- permission)这比写成permission1、permission2、permission3更清楚也更方便循环处理。11. 字典中存字典更复杂的结构化数据如果每个用户还有更详细的信息可以把字典嵌套在字典里users { alice: { role: admin, status: active, location: beijing, }, bob: { role: developer, status: inactive, location: shanghai, }, } for username, info in users.items(): print(username) print( role: info[role]) print( status: info[status]) print( location: info[location])嵌套结构不要一开始就写得太复杂。我的习惯是先看数据要表达什么再决定用列表还是字典。如果只是“一组值”优先列表如果是“一个对象的多个属性”优先字典如果是“一组对象”通常就是列表里放字典。初学者容易踩的坑问题常见原因建议KeyError访问了不存在的键先用in判断或者用get()分不清键和值不知道该遍历keys()还是values()要字段名用keys()要字段值用values()两个都要用items()嵌套结构看不懂列表和字典混在一起先一层一层看外层是什么内层是什么直接赋值导致联动修改两个变量指向同一个字典需要复制时用copy()复杂结构再考虑deepcopy字典结构太随意每条数据字段不统一同一批数据尽量保持相同字段KeyError怎么排查这是字典里最常见的错误user { username: alice, role: admin, } print(user[status])因为status不存在所以会报错。更稳一点的写法是if status in user: print(user[status]) else: print(status is missing)也可以用get()status user.get(status, unknown) print(status)get()的第二个参数是默认值。键不存在时不会报错而是返回默认值。工作里能怎么用字典在工作里特别常见因为很多业务数据天然就是键值对。场景字典可以怎么用配置文件存接口地址、超时时间、重试次数用户信息存用户名、角色、状态、权限任务管理存任务名称、负责人、截止时间、执行状态接口数据JSON 转成 Python 后通常就是字典或列表嵌套字典日志统计用字段保存次数、状态、耗时等结果举个更贴近脚本的小例子task { name: daily_report, owner: alice, status: pending, retry_count: 0, } if task[status] pending: print(Run task: task[name]) task[status] running这个例子不复杂但已经能体现字典的价值它让一条任务数据变得更清楚也更容易扩展。小结字典用来保存键值对适合表达“一个对象的多个属性”访问字典用dict[key]但键不存在时会报KeyError添加和修改都使用dict[key] value删除键值对用del dict[key]遍历键值对用items()遍历键用keys()遍历值用values()一组对象可以用“列表中存字典”一个字段有多个值可以用“字典中存列表”更复杂的数据可以用“字典中存字典”但不要一开始就嵌套太深