1 认识字典
1.1 字典是什么?
在 Python 中,【字典(dictionary)】是一系列键值对(key-value pair)。每个键都与一个值关联,可以使用键来访问与之关联的值。字典用放在花括号({})中的一系列键值对表示,对于每一个键值对,“键” 与 “值” 之间用冒号(:)隔开,相邻键值对之间用逗号(,)隔开。可以将任意 Python 对象用作字典中的值,而键可以理解为一个变量名。字典可存储的信息量几乎不受限制。
1.2 字典长什么样?
下面是一个简单的字典,用来存储A同学的相关信息,字典中包含3个键值对,'name' 是键,与之关联的值是 'Alice';'age' 是键,与之关联的值是 21;'class' 是键,与之关联的值是 104:
student_A={'name':'Alice','age':21,'class':104}
让Python打印出字典,Python将打印字典的内部表示,包括大括号:
{'name':'Alice','age':21,'class':104}
1.3 访问字典中的值
要获取与键关联的值,可指定字典名,并把键放在后面的方括号中:
print(student_A['name'])
这将返回字典student_A中与键‘name’关联的值:
Alice
2 对字典进行操作
2.1 添加键值对
要添加键值对,可依次指定字典名、用方括号括起来的键和与该键关联的值。
下面在字典student_A中添加两项信息:该同学的学校和专业
student_A={'name':'Alice','age':21,'class':104}
student_A['university']='ABC'
student_A['major']='math'
print(student_A)
-------------------------------------以下为打印结果
{'name':'Alice','age':21,'class':104,'university':'ABC','major':'math'}
字典会保留定义时的元素排列顺序,如果将字典打印出来或遍历其元素,将发现元素的排列顺序与其添加顺序相同。
2.2 修改字典中的值
要修改字典中的值,可依次指定字典名、用方括号括起来的键和与该键关联的新值。如下,将student_A的专业改为化学:
student_A={'name':'Alice','age':21,'class':104}
student_A['university']='ABC'
student_A['major']='math'
student_A['major']='chemistry'
print(student_A)
-------------------------------------以下为打印结果
{'name':'Alice','age':21,'class':104,'university':'ABC','major':'chemistry'}
在最新的字典student_A中,'major' 对应的值已经变成了 'chemistry' 。
2.3 删除键值对
可使用 del 语句将相应的键值对彻底删除。在使用del语句时,必须指定字典名和要删除的键。如下,删除字典 student_A 中的键 'major' 及其值:
student_A={'name':'Alice','age':21,'class':104,'university':'ABC','major':'chemistry'}
del student_A['major']
print(student_A)
-------------------------------------以下为最终打印结果
{'name':'Alice','age':21,'class':104,'university':'ABC'}
2.4 多行定义字典
当字典较大时,可使用多行来定义字典:在输入左花括号后按回车键,再在下一行缩进4个空格,指定第一个键值对,并在它后面加上一个逗号。此后再按回车键,文本编辑器将自动缩进后续键值对。定义好字典后,在最后一个键值对的下一行添加一个右花括号。一种不错的做法是,在最后一个键值对后面也加上一个逗号,为以后添加键值对做好准备。
student_A={
'name':'Alice',
'age':21,
'class':104,
'university':'ABC',
'major':'chemistry',
}
2.5 使用get()来访问值
使用放在方括号中的键从字典中获取值可能会引发问题:如果指定的值不存在,就将出错。就字典而言,为避免这种错误,可使用get()方法在指定的键不存在时返回一个默认值。get()方法的第一个参数用于指定键,是必不可少的;第二个参数为当指定的键不存在时要返回的值,是可选的❶。
student_A={'name':'Alice','age':21,'class':104}
point=student_A.get('point','No point value assigned.')
print(point)
-------------------------以下是最终打印结果
No point value assigned.
如果字典中有键'point',就将获得与之关联的值;如果没有,将获得指定的默认值'No point value assigned.',这种情况下,我们将获得一条清晰的消息,不会引发错误。
❶在调用get()方法时,如果没有指定第二个参数且指定的键不存在,Python将返回值None,这个特殊的值表示没有相应的值。
3 遍历字典
Python支持遍历所有键值对、只遍历键、只遍历值。
3.1 遍历所有键值对
可使用for循环和 items() 方法遍历所有键值对。items() 方法返回一个键值对。
student_A={
'name':'Alice',
'age':21,
'class':104,
}
for key, value in student_A.items():
print(f"\nKey:{key}")
print(f"Value:{value}")
-----------------------以下是最终打印结果
Key:name
Value:Alice
Key:age
Value:21
Key:class
Value:104
for循环依次将每个键值对赋给指定的两个变量(这两个变量可以定义为任何便于理解的名字,不是必须定义为key和value)。
3.2 遍历所有键
使用keys()方法可以遍历字典中的所有键。
student_A={
'name':'Alice',
'age':21,
'class':104,
}
print("The keys in the dictionary are as follow:")
for key in student_A.keys():
print(key)
-----------------------以下是最终打印结果
The keys in the dictionary are as follow:
name
age
class
在遍历字典时,会默认遍历所有的键。因此,如果将上述代码中的
for key in student_A.keys():
替换为:
for key in student_A:
输出将不变。
3.3 遍历所有值
可使用values()方法遍历字典中的所有值。
student_A={
'name':'Alice',
'age':21,
'class':104,
}
print("The values in the dictionary are as follow:")
for a in student_A.values():
print(a)
-----------------------以下是最终打印结果
The values in the dictionary are as follow:
Alice
21
104
以上方法提取字典中的所有值,而没有考虑值是否有重复。为剔除重复项,可使用集合(set)❷。
student_A={
'name':'Alice',
'age':21,
'class':104,
}
print("The values in the dictionary are as follow:")
for a in set(student_A.values()):
print(a)
所得结果为一个没有重复元素的列表。
❷集合中的每个元素都必须是独一无二的。
4 嵌套
有时候,需要将多个字典存储在列表中或将列表作为值存储在字典中,这称为嵌套。可以在列表中嵌套字典,在字典中嵌套列表,在字典中嵌套字典。
4.1 在列表中嵌套字典
alien_0={'color':'green','points':5}
alien_1={'color':'yellow','points':10}
alien_2={'color':'red','points':15}
aliens=[alien_0,alien_1,alien_2]
for alien in aliens:
print(alien)
----------------------以下是最终打印结果
{'color':'green','points':5}
{'color':'yellow','points':10}
{'color':'red','points':15}
首先创建三个字典,其中每个字典表示一个外星人。然后将这些字典都存储到一个名为aliens的列表中。最后年,遍历这个列表,将每个外星人都打印出来。
4.2 在字典中嵌套列表
每当需要在字典中将一个键关联到多个值时,都可以在字典中嵌套一个列表。
# 存储顾客所点披萨的信息
pizza={
'crust':'thick',
'toppings':['mushrooms','extra cheese'],
}
# 概述顾客所点的披萨
print(f"You ordered a {pizza['crust']}-crust pizza "
"with the following toppings:")
for topping in pizza['toppings']:
print(f"\t{topping}")
------------------------以下是最终打印结果
You ordered a thick-crust pizza with the following toppings:
mushrooms
extra cheese
首先创建一个字典,其中存储了有关顾客所点披萨的信息。在这个字典中,一个键是'crust',与之关联的值是字符串'thick';另一个键是'toppings',与之关联的值是一个列表,其中存储了顾客要求添加的所有配料。
注意:列表和字典的嵌套层级不应太多。如果嵌套层级比实例中多得多,很可能有更简单的解决方案。
4.3 在字典中嵌套字典
可以在字典中存储字典,但这样可能会让代码很快变得非常复杂。
users={
'aeinstein':{
'first':'albert',
'last':'einstein',
'location':'princeton',
},
'mcurie':{
'first':'marie',
'last':'curie',
'location':'paris',
},
}
for username, user_info in users.items():
print(f"\nUsername:{username}")
full_name=f"{user_info['first']}{user_info['last']}"
location=user_info['location']
print(f"\tFull name: {full_name.title()}")
print(f"\tLocation: {location.title()}")
------------------------以下是最终打印结果
Username:aeinstein
Full name: Alberteinstein
Location: Princeton
Username:mcurie
Full name: Mariecurie
Location: Paris
首先,定义了一个名为users的字典,其中包含两个键:用户名'aeinstein'和'mcurie'。与每个键关联的值都是一个字典,其中包含用户的名、姓和居住地。然后,遍历字典users,让Python依次将每个键赋给变量username,并依次将与当前键相关联的字典赋给变量user_info。
五 说明
本文是笔者在学习Python的字典相关章节过程中所作的内容梳理,既是为了方便自己复习,也希望能够帮助到其他正在学习Python的朋友。笔者学习的书籍是由Eric Matthes著、袁国忠译、陶俊杰审、人民邮电出版社出版的《Python编程 从入门到实践》,本文使用的语言和很多例子都来自该书。作为一个编程小白,笔者认为这本书对初学者非常友好,是一本很经典的书;同时,作为一个编程小白,笔者知识水平有限,文中不免会出现部分描述错误。如果有感到困惑的地方,可能就是本文描述不当所致,请移步至其他优秀的博文中寻求解答。