Python字典(dict)精讲

字典是 Python 中的另一种数据类型,它也可以存储一组数据。和列表与元组不同的是,它可以存储任意类型的对象,如字符串、数字、列表和元组等其他数据类型。

和列表一样,字典之中也包含了许多的值。但是和列表不同,字典不仅可以使用整数作为索引,还可以使用其他的数据类型作为索引。我们把字典中的元素的索引叫作“键”,将元素的内容叫作“值”,将关联的“键”和“值”叫作“键—值”对。

这就好像我们查字典一样,总是要先通过拼音或笔画检字法,找到一个汉字和相关的词语的解释——拼音或笔画检字法,就是字典的不同的“键”;而汉字和相关的词语的解释,就是字典的元素的“值”。通过这个比方,你明白为什么这种数据类型要叫作字典了吧。

Python 创建字典

在 Python 中,字典用放在花括号中的一系列键—值对表示,每个键—值对中的键和值用冒号:分隔,每个键—值对之间用逗号分隔,格式如下所示:

>>>person={"name":"Johnson","age":9,"gender":"male","height":"140cm"}

>>> print(person)
{'name': 'Johnson', 'age': 9, 'gender': 'male', 'height': '140cm'}


我们将一个字典赋值给变量 person,字典中的键分别是 "name"、"age"、 "gender" 和 "height",对应的值分别是 "Johnson"、"9"、"male" 和 "140cm"。我们可以通过键来访问对应的值。

>>> person["name"]
'Johnson'
>>> person["gender"]
'male'


但是如果用字典里没有的键来访问值,Python 会输出错误信息,如下所示:

>>> person["grade"]
Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    person["grade"]
KeyError: 'grade'

person 字典中没有“grade”这个键,所以 Python 会报出“键错误”(Key Error)的信息。

也可以用整数值作为字典的键,就像我们使用整数值作为列表的索引一样,不过这个整数值可以是任意的数字,而且也不一定要是顺序排列的。例如,可以用 100、105 和 8 分别作为 3 个元素的索引值。

提示:字典中的元素是没有顺序的,如下所示。
>> fruits={100:"apple",105:"banana",8:"orange"}
>> print(fruits)
{100: 'apple', 105: 'banana', 8: 'orange'}

我们也可以先创建一个空字典,再逐行添加各个键—值对。我们来看一下如何使用这种方式创建字典 person。

>>> person={}
>>> person["name"]="Johnson"
>>> person["age"]=9
>>> person["gender"]="male"
>>> person["height"]="140cm"
>>> print(person)
{'name': 'Johnson', 'age': 9, 'gender': 'male', 'height': '140cm'}


字典中的键是唯一的,如果有重复的键,后面的键—值对会替换前面的键—值对。但是,值不需要是唯一的,也就是说,不同的键可以拥有相同的值。

>>> fruits={100:"apple",105:"banana",8:"orange",100:"cherry",200:"banana"}
>>> print(fruits)
{100: 'cherry', 105: 'banana', 8: 'orange', 200: 'banana'}

我们看到,键“100”对应的值是“cherry”,而值“apple”已经被覆盖掉了。但是,键“105”和“200”对应的值都是“banana”,这没有任何问题。

Python 修改和新增字典中的值

修改字典中的值的语法与访问字典中的值的语法类似,需要指定字典名和所要修改的值的键,再指定要和该键关联的新的值。我们还是以 person 字典为例,先将一个字典赋值给 person 变量。

>>> person={"name":"Johnson","age":9,"gender":"male","height":"140cm"}
>>> print(person)
{'name': 'Johnson', 'age': 9, 'gender': 'male', 'height': '140cm'}


现在要把键为“age”的值从 9 修改为 8,并且打印出字典 person。

>>> person["age"]=8
>>> print(person)
{'name': 'Johnson', 'age': 8, 'gender': 'male', 'height': '140cm'}

我们可以看到,字典 person 中的键“age”对应的值现在是 8 而不是 9。

向字典添加新的内容的方法就是增加新的键—值对。例如,我们要向 person 字典中增加新的键“grade”,并且给这个键赋值整数 3。

>>> person["grade"]=3
>>> print(person)
{'name': 'Johnson', 'age': 9, 'gender': 'male', 'height': '140cm', 'grade': 3}

通过打印 person 字典,我们可以看到已经有新的键—值对加入到了字典中。

Python 删除键—值对

对于字典中不再需要的信息,我们可以使用 del 语句将其删除。使用 del 语句时,指定字典名和要删除的键。我们还是以 person 字典为例,这次要删除键为“age”的键—值对。

>>> person={"name":"Johnson","age":9,"gender":"male","height":"140cm"}
>>> print(person)
{'name': 'Johnson', 'age': 9, 'gender': 'male', 'height': '140cm'}
>>> del person["age"]
>>> print (person)
{'name': 'Johnson', 'gender': 'male', 'height': '140cm'}

可以看到,键“age”及其对应的值 9 已经从字典 person 中删除掉了,其他键—值对并未受到影响。

我们也可以使用字典的 clear() 方法,把字典中全部的键—值对都删除掉。我们还是以 person 字典为例,调用 clear() 方法后,再次打印 person 字典,可以看到字典里边已经没有任何内容了。

>>> person.clear()
>>> print(person)
{}

Python 返回指定键的值

对于字典中已知的键,可以使用 get 语句返回指定的键所对应的值,如果该键不在字典中,则返回默认值。我们还以 person 字典为例,这次要获取键“name”和“weight”所对应的值。

>>> person={"name":"Johnson","age":9,"gender":"male","height":"140cm"}
>>> print (person.get("name"))
Johnson
>>> print (person.get("weight"))
None

可以看到,键“name”对应的值是“Johnson”;键“weight”的值在字典中是不存在的,所以返回了系统默认值“None”。

我们也可以指定一个需要的默认值,例如“unKnown”。

>>> print (person.get("weight","unKnown"))
unKnown

这次返回的默认值就是“unKnown”,而不是“None”。