1. 一个简单的字典1.1 引言字典可以将相关信息关联起来字典可储存的信息量几乎不受限制。理解字典后就能够更准确的为各种真实物体建模。1.2 一个简单的字典下面是一个简单的字典存储了有关特定外星人的信息。如下所示alien{color:green,points:5}print(alien[color])print(alien[point])# 结果green52. 使用字典2.1 引言在 python 中字典是一系列键值对。每个键都有一个值相关联可以使用键来访问相关联的值。与键相关联的值可以是数、字符串、列表乃至字典。事实上可将任何 python 对象用作字典中的值。键值对是两个相关联的值指定键时python 将返回与之相关联的值。键和值之间用冒号分隔而键值对之间用逗号分隔。在字典中想储存多少键值对都可以最简单的字典只有一个键值对如下所示alien{color:green}2.2 访问字典中的值要获取与键相关联的值可依次指定字典名和放在方括号内的键如下所示alien{color:green}print(alien[color])2.3 添加键值对字典是一种动态结构可随时在其中添加键值对。要添加键值对可依次指定字典名、用方括号括起来的键和相关联的值。如下所示alien{color:green,points:5}print(alien)alien[x_position]0alien[y_position]25print(alien)注意在 python3.7 以后字典中元素的排序顺序与定义时相同。如果将字典打印出来或者遍历其元素将发现元素的排列顺序与添加顺序相同。2.4 先创建一个空字典使用字典来储存用户提供的数据或在编写能自动生成大量键值对的代码时通常需要先定义一个空字典。为此可先使用一对空花括号定义一个字典再分行添加各个键值对。如下所示alien{}alien[color]greenalien[point]5print(alien)2.5 修改字典中的值要修改字典中的值可依次指定字典名、用方括号括起来的键以及与该键相关联的新值。如下所示alien{x_position:0,y_position:25,speed:medium}print(foriginal position:{alien[x_position]})ifalien[speed]slow:x_increment1elifalien[speed]medium:x_increment2else:x_increment3alien[x_position]alien[x_position]x_incrementprint(fnew position:{alen[x_position]})2.6 删除键值对对于字典中不再需要的信息可使用del语句将相应的键值对彻底删除。使用 del 语句时必须指定字典名和要删除的键。如下所示alien{color:green,points:5}print(alien)delalien[points]print(alien)注意删除的键值对会永远消失。2.7 由类似对象组成的字典字典储存的是一个对象的多种信息但也可以使用字典来储存众多对象的同一种信息。例如假设你要调查很多人询问他们最喜欢的编程语言可使用一个字典来储存这种简单的结果如下所示favorite{jen:python,sarah:c,edward:ruby,phil:python,}注意当使用多行来定义字典时要在输入左花括号后按回车键。在下一行缩进四个空格指定第一个键值对并在它后面加上一个逗号。此后再按回车键时文本编辑器将自动缩进后续键值对且缩进量与第一个键值对相同。定义好字典后在最后一个键值对的下一行添加一个右花括号并缩进四个空格使之与字典中的键对齐。对于较长的列表和字典大多数编译器提供了以类似方式设置格式的功能。2.8 使用get( )来访问值使用放在方括号内的键从字典中获取感兴趣的值时可能会引发问题如果指定的键不存在就会出错。可使用方法get( )在指定的键不存在时返回一个默认值从而避免这样的错误。方法get( )的第一个参数用于指定键是必不可少的第二个参数为指定的键不存在时要返回的值是可选的。如下所示alien{color:green,speed:slow}point_valuealien.get(point,no point value assigned)print(point_value)注意调用 get( ) 时如果没有指定第二个参数且指定的键不存在python 将返回值 None。3. 遍历字典3.1 引言一个 python 字典可能只包含几个键值对也可能包含几百个键值对。鉴于字典可能包含大量数据python 支持对字典进行遍历。字典有多种遍历方式可遍历字典的所有键值对也可仅遍历键或值。3.2 遍历所有键值对先来看一个新字典它用于储存有关网站用户的信息。下面的字典储存一名用户的用户名、名和姓。如下所示user{username:efermi,first:enrico,last:fermi,}forkey,valueinuser.items():print(f\nkey:{key})print(fvalue:{value})for 语句的第二部分包含字典名和方法items( )它返回一个键值对列表接下来 for 循环依次将每个键值对赋给指定的两个变量。3.3 遍历字典中所有的键在不需要字典中的值的时候方法keys( )很有用。方法keys( )并非只能用于遍历实际上它返回一个列表其中包含字典中的所有键。如下所示languages{jen:python,sarah:c,edward:ruby,phil:python,}fornameinlanguages.keys():print(name.title())注意遍历字典时会默认遍历所有的键因此使用方法 keys( ) 只是让代码更容易理解可以省略它。3.4 按特定顺序遍历字典中的所有键要以特定的顺序返回元素一种方法是在 for 循环中对返回的键进行排序。为此可使用函数sorted( )来获得按特定顺序排列的键列表的副本。如下所示languages{jen:python,sarah:c,edward:ruby,phil:python,}fornameinsorted(languages.keys()):print(f{name.title()},thank you for taking the poll)3.5 遍历字典中的所有值3.5.1 方法values可使用方法values( )来返回一个值列表不包含任何键。如下所示languages{jen:python,sarah:c,edward:ruby,phil:python,}print(the following languages have been mentioned:)forlanguageinlanguages.values():print(language.title())3.5.2 方法set这种做法提取字典中所有的值而没有考虑是否重复最终的列表可能包含大量的重复项。为剔除重复项可使用集合set集合中的每个元素都必须是独一无二的。如下所示languages{jen:python,sarah:c,edward:ruby,phil:python,}print(the following languages have been mentioned:)forlanguageinset(languages.values()):print(language.title())注意可直接使用一对花括号创建集合并在其中用逗号分隔元素languages{python,ruby,c,python}4. 嵌套4.1 引言有时候需要将一系列字典储存在列表中或将列表作为值储存在字典中这称之为嵌套。可以在列表中嵌套字典、在字典中嵌套列表甚至在字典中嵌套字典。4.2 字典列表字典 alien 包含一个外星人的各种信息但无法储存第二个外星人的信息更别说屏幕上全部外星人的信息了。如何管理成群结队的外星人呢一种办法是创建一个外星人列表其中每一个外星人都是一个字典如下所示alien1{color:green,point:5}alien2{color:yellow,point:10}alien3{color:red,point:15}aliens[alien1,alien2,alien3]foralieninaliens:print(alien)4.3 在字典中储存列表有时候需要将列表储存在字典中而不是将字典储存在列表中如下所示pizza{crust:thick,toppings:[mushrooms,extra cheese]}# 概述所点的披萨print(fyou ordered a{pizza[crust]}-crust pizzawith the following toppings:)fortoppinginpizza[toppings]:print(\t,topping)# 结果you ordered a thick-crust pizzawiththe following toppings:mushrooms extra cheese注意列表和字典的嵌套层级不应太多。如果嵌套层级比前面的示例多得多可能有更简单的解决方法。此外函数调用 print( ) 中的字符串很长可以在合适的位置分行。只需要在每行末尾都加上引号同时对于除第一行外的其他各行都在行首加上引号并缩进。4.4 在字典中储存字典可在字典中嵌套字典但这样做代码可能很快复杂起来。如下所示users{aeinstein:{first:albet,last:einstein,location,princeton,},mcurie:{first:marie,last:curie,location:paris,},}forusername,user_infoinusers.items():print(f\nUsername:{username})full_namef{user_info[first]}{user_info[last]}locationuser_info[location]print(f\tFull name:{full_name.title()})print(f\tLocation:{location.title()})注意表示每位用户的字典都具有相同的结构虽然 python 并没有这样的要求但这使得嵌套的字典处理起来更容易。倘若表示每位用户的字典都包含不同的键for 循环内部的代码将更复杂。
第5章 字典结构
发布时间:2026/6/1 12:44:27
1. 一个简单的字典1.1 引言字典可以将相关信息关联起来字典可储存的信息量几乎不受限制。理解字典后就能够更准确的为各种真实物体建模。1.2 一个简单的字典下面是一个简单的字典存储了有关特定外星人的信息。如下所示alien{color:green,points:5}print(alien[color])print(alien[point])# 结果green52. 使用字典2.1 引言在 python 中字典是一系列键值对。每个键都有一个值相关联可以使用键来访问相关联的值。与键相关联的值可以是数、字符串、列表乃至字典。事实上可将任何 python 对象用作字典中的值。键值对是两个相关联的值指定键时python 将返回与之相关联的值。键和值之间用冒号分隔而键值对之间用逗号分隔。在字典中想储存多少键值对都可以最简单的字典只有一个键值对如下所示alien{color:green}2.2 访问字典中的值要获取与键相关联的值可依次指定字典名和放在方括号内的键如下所示alien{color:green}print(alien[color])2.3 添加键值对字典是一种动态结构可随时在其中添加键值对。要添加键值对可依次指定字典名、用方括号括起来的键和相关联的值。如下所示alien{color:green,points:5}print(alien)alien[x_position]0alien[y_position]25print(alien)注意在 python3.7 以后字典中元素的排序顺序与定义时相同。如果将字典打印出来或者遍历其元素将发现元素的排列顺序与添加顺序相同。2.4 先创建一个空字典使用字典来储存用户提供的数据或在编写能自动生成大量键值对的代码时通常需要先定义一个空字典。为此可先使用一对空花括号定义一个字典再分行添加各个键值对。如下所示alien{}alien[color]greenalien[point]5print(alien)2.5 修改字典中的值要修改字典中的值可依次指定字典名、用方括号括起来的键以及与该键相关联的新值。如下所示alien{x_position:0,y_position:25,speed:medium}print(foriginal position:{alien[x_position]})ifalien[speed]slow:x_increment1elifalien[speed]medium:x_increment2else:x_increment3alien[x_position]alien[x_position]x_incrementprint(fnew position:{alen[x_position]})2.6 删除键值对对于字典中不再需要的信息可使用del语句将相应的键值对彻底删除。使用 del 语句时必须指定字典名和要删除的键。如下所示alien{color:green,points:5}print(alien)delalien[points]print(alien)注意删除的键值对会永远消失。2.7 由类似对象组成的字典字典储存的是一个对象的多种信息但也可以使用字典来储存众多对象的同一种信息。例如假设你要调查很多人询问他们最喜欢的编程语言可使用一个字典来储存这种简单的结果如下所示favorite{jen:python,sarah:c,edward:ruby,phil:python,}注意当使用多行来定义字典时要在输入左花括号后按回车键。在下一行缩进四个空格指定第一个键值对并在它后面加上一个逗号。此后再按回车键时文本编辑器将自动缩进后续键值对且缩进量与第一个键值对相同。定义好字典后在最后一个键值对的下一行添加一个右花括号并缩进四个空格使之与字典中的键对齐。对于较长的列表和字典大多数编译器提供了以类似方式设置格式的功能。2.8 使用get( )来访问值使用放在方括号内的键从字典中获取感兴趣的值时可能会引发问题如果指定的键不存在就会出错。可使用方法get( )在指定的键不存在时返回一个默认值从而避免这样的错误。方法get( )的第一个参数用于指定键是必不可少的第二个参数为指定的键不存在时要返回的值是可选的。如下所示alien{color:green,speed:slow}point_valuealien.get(point,no point value assigned)print(point_value)注意调用 get( ) 时如果没有指定第二个参数且指定的键不存在python 将返回值 None。3. 遍历字典3.1 引言一个 python 字典可能只包含几个键值对也可能包含几百个键值对。鉴于字典可能包含大量数据python 支持对字典进行遍历。字典有多种遍历方式可遍历字典的所有键值对也可仅遍历键或值。3.2 遍历所有键值对先来看一个新字典它用于储存有关网站用户的信息。下面的字典储存一名用户的用户名、名和姓。如下所示user{username:efermi,first:enrico,last:fermi,}forkey,valueinuser.items():print(f\nkey:{key})print(fvalue:{value})for 语句的第二部分包含字典名和方法items( )它返回一个键值对列表接下来 for 循环依次将每个键值对赋给指定的两个变量。3.3 遍历字典中所有的键在不需要字典中的值的时候方法keys( )很有用。方法keys( )并非只能用于遍历实际上它返回一个列表其中包含字典中的所有键。如下所示languages{jen:python,sarah:c,edward:ruby,phil:python,}fornameinlanguages.keys():print(name.title())注意遍历字典时会默认遍历所有的键因此使用方法 keys( ) 只是让代码更容易理解可以省略它。3.4 按特定顺序遍历字典中的所有键要以特定的顺序返回元素一种方法是在 for 循环中对返回的键进行排序。为此可使用函数sorted( )来获得按特定顺序排列的键列表的副本。如下所示languages{jen:python,sarah:c,edward:ruby,phil:python,}fornameinsorted(languages.keys()):print(f{name.title()},thank you for taking the poll)3.5 遍历字典中的所有值3.5.1 方法values可使用方法values( )来返回一个值列表不包含任何键。如下所示languages{jen:python,sarah:c,edward:ruby,phil:python,}print(the following languages have been mentioned:)forlanguageinlanguages.values():print(language.title())3.5.2 方法set这种做法提取字典中所有的值而没有考虑是否重复最终的列表可能包含大量的重复项。为剔除重复项可使用集合set集合中的每个元素都必须是独一无二的。如下所示languages{jen:python,sarah:c,edward:ruby,phil:python,}print(the following languages have been mentioned:)forlanguageinset(languages.values()):print(language.title())注意可直接使用一对花括号创建集合并在其中用逗号分隔元素languages{python,ruby,c,python}4. 嵌套4.1 引言有时候需要将一系列字典储存在列表中或将列表作为值储存在字典中这称之为嵌套。可以在列表中嵌套字典、在字典中嵌套列表甚至在字典中嵌套字典。4.2 字典列表字典 alien 包含一个外星人的各种信息但无法储存第二个外星人的信息更别说屏幕上全部外星人的信息了。如何管理成群结队的外星人呢一种办法是创建一个外星人列表其中每一个外星人都是一个字典如下所示alien1{color:green,point:5}alien2{color:yellow,point:10}alien3{color:red,point:15}aliens[alien1,alien2,alien3]foralieninaliens:print(alien)4.3 在字典中储存列表有时候需要将列表储存在字典中而不是将字典储存在列表中如下所示pizza{crust:thick,toppings:[mushrooms,extra cheese]}# 概述所点的披萨print(fyou ordered a{pizza[crust]}-crust pizzawith the following toppings:)fortoppinginpizza[toppings]:print(\t,topping)# 结果you ordered a thick-crust pizzawiththe following toppings:mushrooms extra cheese注意列表和字典的嵌套层级不应太多。如果嵌套层级比前面的示例多得多可能有更简单的解决方法。此外函数调用 print( ) 中的字符串很长可以在合适的位置分行。只需要在每行末尾都加上引号同时对于除第一行外的其他各行都在行首加上引号并缩进。4.4 在字典中储存字典可在字典中嵌套字典但这样做代码可能很快复杂起来。如下所示users{aeinstein:{first:albet,last:einstein,location,princeton,},mcurie:{first:marie,last:curie,location:paris,},}forusername,user_infoinusers.items():print(f\nUsername:{username})full_namef{user_info[first]}{user_info[last]}locationuser_info[location]print(f\tFull name:{full_name.title()})print(f\tLocation:{location.title()})注意表示每位用户的字典都具有相同的结构虽然 python 并没有这样的要求但这使得嵌套的字典处理起来更容易。倘若表示每位用户的字典都包含不同的键for 循环内部的代码将更复杂。