在Python中,字典是一系列键—值对。每个键都与一个值相关联,你可以使用键来访问与之相关联的值。与键相关联的值可以是数字、字符串、列表乃至字典。事实上,可将任何Python对象用作字典中的值。
在Python中,字典用放在花括号{}中的一系列键—值对表示:
键—值对是两个相关联的值。指定键时,Python将返回与之相关联的值。键和值之间用冒号分隔,而键—值对之间用逗号分隔。在字典中,你想存储多少个键—值对都可以。
一、使用字典
1、访问字典中的值
要获取与键相关联的值,可依次指定字典名和放在方括号内的键,如下所示:
这将返回字典alien_0中与键'color'相关联的值:
2、添加一对键值
字典是一种动态结构,可随时在其中添加键—值对。要添加键—值对,可依次指定字典名、用方括号括起的键和相关联的值。
了一个键—值对,其中的键为'x_position',而值为0。在❷处,我们重复这样的操作,但使用的键为'y_position'。打印修改后的字典时,将看到这两个新增的键—值对:
3、修改字典中的值
要修改字典中的值,可依次指定字典名、用方括号括起的键以及与该键相关联的新值。
输出表明键值由green变成了yellow。
4、删除键—值对
对于字典中不再需要的信息,可使用del语句将相应的键—值对彻底删除。使用del语句时,必须指定字典名和要删除的键。
输出如下:points键已删除
二、由类似对象组成的字典
可以使用字典来存储众多对象的同一种信息。例如,假设你要调查很多人,询问他们最喜欢的编程语言,可使用一个字典来存储这种简单调查的结果,如下所示:
三、遍历字典
1、可以使用一个for循环来遍历字典,用于存储键—值对中的键和值。对于这两个变量,可使用任何名称。for语句的第二部分包含字典名和方法items(),它返回一个键—值对列表。
输出如下:
注意,即便遍历字典时,键—值对的返回顺序也与存储顺序不同。Python不关心键—值对的存储顺序,而只跟踪键和值之间的关联关系。
2、在不需要使用字典中的值时,方法keys()很有用。
代码行让Python提取字典favorite_languages中的所有键,并依次将它们存储到变量name中。输出列出了每个被调查者的名字:
遍历字典时,会默认遍历所有的键,因此,如果将上述代码中的for name infavorite_languages.keys():替换为for name in favorite_languages:,输出将不变。
3、使用keys()确定某个人是否接受了调查。下面的代码确定Erin是否接受了调查:
方法keys()并非只能用于遍历;实际上,它返回一个列表,其中包含字典中的所有键,因此❶处的代码行只是核实'erin'是否包含在这个列表中。由于她并不包含在这个列表中,因此打印一条消息,邀请她参加调查:
3、按顺序遍历字典中的所有键
字典总是明确地记录键和值之间的关联关系,但获取字典的元素时,获取顺序是不可预测的。要以特定的顺序返回元素,一种办法是在for循环中对返回的键进行排序。为此,可使用函数sorted()来获得按特定顺序排列的键列表的副本:
输出表明,按顺序显示了所有被调查者的名字:
4、可使用方法values(),它返回一个值列表,而不包含任何键。
使用方法values(),它返回一个值列表,而不包含任何键。
这条for语句提取字典中的每个值,并将它们依次存储到变量language中。通过打印这些值,就获得了一个列表,其中包含被调查者选择的各种语言:
这种做法提取字典中所有的值,而没有考虑是否重复。涉及的值很少时,这也许不是问题,但如果被调查者很多,最终的列表可能包含大量的重复项。为剔除重复项,可使用集合(set)。集合类似于列表,但每个元素都必须是独一无二的
三、嵌套
有时候,需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为嵌套。你可以在列表中嵌套字典、在字典中嵌套列表甚至在字典中嵌套字典。正如下面的示例将演示的,嵌套是一项强大的功能。
1、字典列表
我们首先创建了三个字典,其中每个字典都表示一个外星人。在❶处,我们将这些字典都放到一个名为aliens的列表中。最后,我们遍历这个列表,并将每个外星人都打印出来:
2、在字典中存储列表
每当需要在字典中将一个键关联到多个值时,都可以在字典中嵌套一个列表。
如上图所示,每个名字相关联的值都是一个列表(见❶)。有些人喜欢的语言只有一种,而有些人有多种。遍历字典时(见❷),使用了变量languages来依次存储字典中的每个值。在遍历字典的主循环中,我们又使用了一个for循环来遍历每个人喜欢的语言列表(见❸)。现在,每个人想列出多少种喜欢的语言都可以:
3、在字典中存储字典
可在字典中嵌套字典,如果有多个网站用户,每个都有独特的用户名,可在字典中将用户名作为键,然后将每位用户的信息存储在一个字典中,并将该字典作为与用户名相关联的值。在下面的程序中,对于每位用户,我们都存储了其三项信息:名、姓和居住地;为访问这些信息,我们遍历所有的用户名,并访问与每个用户名相关联的信息字典:
如上图所示,首先定义了一个名为users的字典,其中包含两个键:用户名'aeinstein'和'mcurie';与每个键相关联的值都是一个字典,其中包含用户的名、姓和居住地。
在❶处,我们遍历字典users,让Python依次将每个键存储在变量username中,并依次将与当前键相关联的字典存储在变量user_info中。在主循环内部的❷处,我们将用户名打印出来。
在主循环内部的❷处,我们将用户名打印出来。
在❸处,我们开始访问内部的字典。变量user_info包含用户信息字典,而该字典包含三个键:'first'、'last'和'location';对于每位用户,我们都使用这些键来生成整洁的姓名和居住地,然后打印有关用户的简要信息(见❹):