第6章. 字典
- 6.1 一个简单的字典
- 6.2 使用字典
- 6.2.1 访问字典中的值
- 6.2.2 添加键值对
- 6.2.3 先创建一个空字典
- 6.2.4 修改字典中的值
- 6.2.5 删除键值对
- 6.2.6 由类似对象组成的字典
- 6.2.7 使用 get() 来访问值
- 6.3 遍历字典
- 6.3.1 遍历所有键值对
- 6.3.2 遍历字典中的所有键
- 6.3.3 按特定顺序遍历字典中的所有键
- 6.3.4 遍历字典中的所有值
- 6.4 嵌套
- 6.4.1 字典列表
- 6.4.2 在字典中存储列表
- 6.4.3 在字典中存储字典
- 6.1 一个简单的字典
示例:
1 alien_0 = {'color':'green','points':5}
2 print(alien_0['color'])
3 print(alien_0['points'])
运行结果:
- 6.2 使用字典
在 Python 中,字典是一系列键值对,每个键都与一个值相关联,你可使用键来访问相关联的值。与键相关联的值可以是数、字符串、列表乃至字典。事实上,可将任何 Python 对象用作字典中的值。
在 Python 中,字典用放在花括号 { } 中的一系列键值对表示。
键和值之间用冒号分隔,而键值对之间用逗号分隔。在字典中,想存储多少个键值对都可以。
- 6.2.1 访问字典中的值
要获取与键相关联的值,可依次指定字典名和放在方括号内的键。
示例:
1 alien_0 = {'color':'green','points':5}
2 print(alien_0['color'])
运行结果:
- 6.2.2 添加键值对
字典是一种动态结构,可随时在其中添加键值对。要添加键值对,可依次指定字典名、用方括号括起的键和相关联的值。
示例:
1 alien_0 = {'color':'green','points':5}
2 print(alien_0)
3
4 alien_0['x_position'] = 0
5 alien_0['y_position'] = 25
6 print(alien_0)
运行结果:
- 6.2.3 先创建一个空字典
可使用一对空花括号定义一个字典。
示例:
1 alien_0 = {}
2 print(alien_0)
3
4 alien_0['color'] = 'green'
5 alien_0['points'] = 5
6 print(alien_0)
运行结果:
- 6.2.4 修改字典中的值
要修改字典中的值,可依次指定字典名,用方括号括起的键,以及与该键相关联的新值。
示例:
1 alien_0 = {'color':'green'}
2 print(f"The alien is {alien_0['color']}.")
3
4 alien_0['color'] = 'yellow'
5 print(f"The alien is now {alien_0['color']}.")
运行结果:
- 6.2.5 删除键值对
可使用 del 语句将相应的键值对彻底删除。使用 del 语句时,必须指定字典名和要删除的键。
删除的键值对会永远消失。
示例:
1 alien_0 = {'color':'green','points':5}
2 print(alien_0)
3
4 del alien_0['points']
5 print(alien_0)
运行结果:
- 6.2.6 由类似对象组成的字典
确定需要使用多行来定义字典时,要在输入左花括号后按回车键。在下一行缩进四个空格,指定第一个键值对,并在它后面加上一个逗号。
一种不错的做法是,在最后一个键值对后面也加上逗号,为以后在下一行添加键值对做好准备。
示例:
1 favorite_languages = {
2 'jen':'python',
3 'sarah':'c',
4 'edward':'ruby',
5 'phil':'python',
6 }
7
8 language = favorite_languages['sarah'].title()
9 print(f"Sarah's favorite language is {language}.")
运行结果:
- 6.2.7 使用 get() 来访问值
使用放在方括号内的键从字典中获取感兴趣的值时,可能会引发问题:如果指定的键不存在就会出错。
可使用方法 get() 在指定的键不存在时返回一个默认值,从而避免这样的错误。
方法 get() 的第一个参数用于指定键,是必不可少的;第二个参数为指定的键不存在时要返回的值,是可选的。
如果字典中有要查询的键,将获得与之相关联的值;如果没有,将获得指定的默认值。
调用 get() 时,如果没有指定第二个参数且指定的键不存在,Python 将返回值 None。
示例:
1 alien_0 = {'color':'green','speed':'slow'}
2
3 point_value = alien_0.get('points','No point value assigned.')
4 print(point_value)
运行结果:
- 6.3.1 遍历所有键值对
方法 items() 返回一个键值对列表。
示例:
1 user_0 = {
2 'username':'efermi',
3 'first':'enrico',
4 'last':'fermi',
5 }
6
7 for k,v in user_0.items(): # k和v 两个变量
8 print(f"\nKey:{k}")
9 print(f"Value:{v}")
运行结果:
- 6.3.2 遍历字典中的所有键
在不需要使用字典中的值时,方法 keys() 很有用。
示例:
1 favorite_languages = {
2 'jen':'python',
3 'sarah':'c',
4 'edward':'ruby',
5 'phil':'python',
6 }
7
8 for name in favorite_languages.keys():
9 print(name.title())
运行结果:
遍历字典时,会默认遍历所有的键。因此,如果将上述代码中的:
1 for name in favorite_languages.keys():
替换为:
1 for name in favorite_languages:
输出将不变。
- 6.3.3 按特定顺序遍历字典中的所有键
方法 keys() 实际上返回一个列表,其中包含字典中的所有键。
可使用函数 sorted() 来获得按特定顺序排列的键列表的副本。
示例:
1 favorite_languages = {
2 'jen':'python',
3 'sarah':'c',
4 'edward':'ruby',
5 'phil':'python',
6 }
7
8 for name in sorted(favorite_languages.keys()):
9 print(name.title())
运行结果:
- 6.3.4 遍历字典中的所有值
可使用方法 values() 来返回一个值列表,不包含任何键。
1 favorite_languages = {
2 'jen':'python',
3 'sarah':'c',
4 'edward':'ruby',
5 'phil':'python',
6 }
7
8 print("The following languages have been mentioned:")
9 for language in favorite_languages.values():
10 print(language.title())
运行结果:
为剔除重复项,可使用集合 set。集合中的每个元素都是独一无二的。
1 favorite_languages = {
2 'jen':'python',
3 'sarah':'c',
4 'edward':'ruby',
5 'phil':'python',
6 }
7
8 print("The following languages have been mentioned:")
9 for language in set(favorite_languages.values()):
10 print(language.title())
运行结果:
可使用花括号直接创建集合,并在其中用逗号分隔元素:
1 languages = {'python','ruby','python','c'}
2 print(languages)
运行结果:
集合和字典很容易混淆,因为它们都是用一对花括号定义的。当花括号内没有键值对时,定义的很可能是集合。不同于列表和字典,集合不会以特定的顺序存储元素。
- 6.4.1 字典列表
1 alien_0 = {'color':'green','points':5}
2 alien_1 = {'color':'yellow','points':10}
3 alien_2 = {'color':'red','points':15}
4
5 aliens = [alien_0,alien_1,alien_2]
6
7 for alien in aliens:
8 print(alien)
运行结果:
- 6.4.2 在字典中存储列表
1 pizza = {
2 'crust':'thick',
3 'toppings':['mushrooms','extra cheese'],
4 }
5
6 print(f"You ordered a {pizza['crust']}-crust pizza with the following toppings:")
7 for topping in pizza['toppings']:
8 print("\t" + topping)
res:
- 6.4.3 在字典中存储字典
1 users = {
2 'aeinstein':{
3 'first':'albert',
4 'last':'einstein',
5 'location':'princeton',
6 },
7
8 'mcurie':{
9 'first':'marie',
10 'last':'curie',
11 'location':'paris',
12 },
13 }
14
15 for username,user_info in users.items():
16 print(f"Username:{username}")
17 full_name = f"{user_info['first']} {user_info['last']}"
18 location = user_info['location']
19
20 print(f"\tFull name:{full_name.title()}")
21 print(f"\tLocation:{location.title()}")
res:
(〃>_<;〃)(〃>_<;〃)(〃>_<;〃)