Python中,字典是一系列键—值对。每个键都与一个值相关联,你可以使用键来访问与之相关联的值。与键相关联的值可以是数字、字符串、列表乃至字典。事实上,可将任何Python对象用作字典中的值。

Python中,字典用放在花括号{}中的一系列键—值对表示,如前面的示例所示:

  1. watermelon = {'size': 'large', 'sound': 'pongpongpong', 'color': 'red'}

键—值对是两个相关联的值。指定键时,Python将返回与之相关联的值。键和值之间用冒号分隔,而键—值对之间用逗号分隔。在字典中,你想存储多少个键—值对都可以。

最简单的字典只有一个键—值对,如下述修改后的字典watermelon所示:

  1. watermelon = {'size': 'large'}

这个字典只存储了一项有关西瓜的特征,具体地说就是它的大小。在这个字典中,字符串’size’是一个键,与之相关联的值为’large’。

6.2.1 访问字典中的值

要获取与键相关联的值,可依次指定字典名和放在方括号内的键,如下所示:

watermelon = {'size': 'large'}
print(watermelon['size'])

这将返回字典中与键size对应的值:


large


字典中可包含任意数量的键—值对。例如,下面是最初的字典watermelon,其中包含三个键—值对:

watermelon = {'size': 'large', 'sound': 'pongpongpong', 'color': 'red'}

现在你可以随意访问西瓜的颜色和声音。如果顾客购买了它,可以通过以下方式判断西瓜熟不熟:

watermelon = {'size': 'large', 'sound': 'pongpongpong', 'color': 'red'}
if watermelon['size'] == 'large' and watermelon['sound'] == 'pongpongpong' and watermelon['color'] == 'red':
    print('这瓜不错,我要了!')
else:
    print('你这瓜保熟吗?')

根据我们之前学习的if语句的知识,我们可以知道,这一定会输出:


这瓜不错,我要了!


6.2.2 添加键—值对

字典是一种动态结构,可随时在其中添加键—值对。要添加键—值对,可依次指定字典名、用方括号括起的键和相关联的值。

下面在watermelon中添加一条新的特征信息:

watermelon = {'size': 'large', 'sound': 'pongpongpong', 'color': 'red'}
watermelon['price'] = 2
print(watermelon)

输出:


{‘size’: ‘large’, ‘sound’: ‘pongpongpong’, ‘color’: ‘red’, ‘price’: 2}


我们首先定义了前面一直在使用的字典,然后打印这个字典,以显示其信息快照。我们在这个字典中新增了一个键—值对,其中的键为’price’,而值为2。

这个字典的最终版本包含四个键—值对,其中原来的三个指定西瓜的颜色、大小和声音,而新增的一个指定价格。注意,键—值对的排列顺序与添加顺序不同。Python不关心键—值对的添加顺序,而只关心键和值之间的关联关系。

6.2.3 先创建一个空字典

有时候,在空字典中添加键—值对是为了方便,而有时候必须这样做。为此,可先使用一对空的花括号定义一个字典,再分行添加各个键—值对。例如,下例演示了如何以这种方式创建字典watermelon:

watermelon = {}
watermelon['size'] = 'large'
watermelon['color'] = 'red'
print(watermelon)

这里首先定义了空字典watermelon,再在其中添加颜色和大小,得到前述示例一直在使用的字典:


{‘size’: ‘large’, ‘color’: ‘red’}


使用字典来存储用户提供的数据或在编写能自动生成大量键—值对的代码时,通常都需要先定义一个空字典。

6.2.4 修改字典中的值

要修改字典中的值,可依次指定字典名、用方括号括起的键以及与该键相关联的新值。比如随着买卖的进行,老板修改了西瓜的价格:

watermelon = {'size': 'large', 'sound': 'pongpongpong', 'color': 'red', 'price': 2}
print(f'西瓜的价格是{watermelon['price']}!')
watermelon['price'] = 0.2
print(f'现在西瓜的价格是{watermelon['price']}!')

我们首先定义了watermelon字典,其中价格设置为2。后来老板被顾客威胁了,把价格降到了0.2:


西瓜的价格是2!
现在西瓜的价格是0.2!


6.2.5 删除键—值对

对于字典中不再需要的信息,可使用del语句将相应的键—值对彻底删除。使用del语句时,必须指定字典名和要删除的键。

例如,下面的代码从字典watermelon中删除键’color’及其值:

watermelon = {'size': 'large', 'sound': 'pongpongpong', 'color': 'red', 'price': 2}
print(watermelon)
del watermelon['color']
print(watermelon)

输出:


{‘size’: ‘large’, ‘sound’: ‘pongpongpong’, ‘color’: ‘red’, ‘price’: 2}
{‘size’: ‘large’, ‘sound’: ‘pongpongpong’, ‘price’: 2}


注: 删除的键—值对永远消失了。

6.2.6 由类似对象组成的字典

在前面的示例中,字典存储的是一个对象(西瓜)的多种信息,但你也可以使用字典来存储众多对象的同一种信息。例如,假设你要调查很多人,询问他们最喜欢的编程语言,可使用一个字典来存储这种简单调查的结果,如下所示:

favorite_languages = { 
    'six': 'python', 
    'thomas': 'c++', 
    'edward': 'ruby', 
    'phil': 'python', 
 }

正如你看到的,我们将一个较大的字典放在了多行中。其中每个键都是一个被调查者的名字,而每个值都是被调查者喜欢的语言。确定需要使用多行来定义字典时,在输入左花括号后按回车键,再在下一行缩进四个空格,指定第一个键—值对,并在它后面加上一个逗号。此后你再次按回车键时,文本编辑器将自动缩进后续键—值对,且缩进量与第一个键—值对相同。

定义好字典后,在最后一个键—值对的下一行添加一个右花括号,并缩进四个空格,使其与字典中的键对齐。另外一种不错的做法是在最后一个键—值对后面也加上逗号,为以后在下一行添加键—值对做好准备。

对于较长的列表和字典,大多数编辑器都有以类似方式设置其格式的功能。对于较长的字典,还有其他一些可行的格式设置方式,因此在你的编辑器或其他源代码中,你可能会看到稍微不同的格式设置方式。

给定被调查者的名字,可使用这个字典轻松地获悉他喜欢的语言:

favorite_languages = { 
    'six': 'python', 
    'thomas': 'c++', 
    'edward': 'ruby', 
    'phil': 'python', 
 }
print("Sarah's favorite language is " + favorite_languages['sarah'].title() + ".")

输出:


Six’s favorite language is Python.