二刷《Python编程 从入门到实践》(5)
本文为 《Python编程 从入门到实践》(第2版) 的读书笔记。
第六章 字典
6.2 使用字典
在Python中,字典 是一系列 键—值对 。每个键都与一个值相关联,可以使用键来访问与之相关联的值。这些值可以是Python中的任何对象。字典用放在花括号{}
中的一系列键—值对表示。指定键时,Python将返回与之相关联的值。键和值之间用冒号:
分隔,而键—值对之间用逗号,
分隔。
alien_0 = {'color': 'green', 'points': 5}
6.2.1 访问字典中的值
可依次指定字典名和放在方括号内的键,来获取与键相关联的值。
alien_0 = {'color': 'green', 'points': 5}
new_points = alien_0['points']
print("You just earned " + str(new_points) + " points!")
6.2.2 添加键—值对
可依次指定字典名、用方括号括起的键和相关联的值,来给字典添加键—值对。
alien_0 = {'color': 'green', 'points': 5}
alien_0['x_position'] = 0
alien_0['y_position'] = 25
print(alien_0)
{'color': 'green', 'points': 5, 'y_position': 25, 'x_position': 0}
应注意,键—值对的排列顺序与添加顺序不同。Python不关心键—值对的添加顺序,而只关心键和值之间的关联关系。
6.2.3 先创建一个空字典
alien_0 = {}
6.2.4 修改字典中的值
可以直接通过赋值的方法修改字典中的值。
>>> alien_0 = {'color': 'green'}
>>> alien_0['color'] = 'yellow'
>>> print(alien_0)
{'color': 'yellow'}
6.2.5 删除键—值对
可使用del
语句将相应的键—值对彻底删除。
alien_0 = {'color': 'green', 'points': 5}
del alien_0['points']
6.2.6 由类似对象组成的字典
可以将类似的对象储存在一个字典里,运用多行进行定义,提高可读性。行前需缩进四个空格,可以在最后一个键—值对后面加上逗号,为以后添加键—值对做准备。
6.3 遍历字典
6.3.1 遍历所有的键—值对
利用方法items()
,将键—值对赋给变量key
和value
,并利用for 循环遍历字典。
user_0 = {
'username': 'efermi',
'first': 'enrico',
'last': 'fermi',
}
for key, value in user_0.items():
print("\nKey: " + key)
print("Value: " + value)
应注意,即便遍历字典时,键—值对的返回顺序也与存储顺序不同。
6.3.2 遍历字典中的所有键
可以利用方法key()
提取字典的键。
for name in favorite_languages.keys():
print(name.title())
遍历字典时,会默认遍历所有的键,因此,如果将上述代码中的for name in favorite_languages.keys():
替换为for name in favorite_languages:
输出不会改变。
6.3.3 按顺序遍历字典中的所有键
可使用函数sorted()
来获得按特定顺序排列的键列表。
for name in sorted(favorite_languages.keys()):
print(name.title() + ", thank you for taking the poll.")
6.3.4 遍历字典中的所有值
可以利用方法value()
提取字典的值。这种方法是不考虑内容是否重复的。为剔除重复项,可使用 集合set
。集合类似于列表,但集合中的每个元素都是独一无二的。
for language in set(favorite_languages.values()):
print(language.title())
6.4 嵌套
有时候,需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为 嵌套。
6.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]
也可以先创建好列表,之后再添加字典。
aliens = []
for alien_number in range(30):
new_alien = {'color': 'green', 'points': 5, 'speed': 'slow'}
aliens.append(new_alien)
6.4.2 在字典中储存列表
每当需要在字典中将一个键关联到多个值时,都可以在字典中嵌套一个列表。
favorite_languages = {
'jen': ['python', 'ruby'],
'sarah': ['c'],
'edward': ['ruby', 'go'],
'phil': ['python', 'haskell'],
}
6.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("\nUsername: " + username)
full_name = user_info['first'] + " " + user_info['last']
location = user_info['location']
print("\tFull name: " + full_name.title())
print("\tLocation: " + location.title())
应注意,上述每位用户的字典的结构都相同,虽然Python并没有这样的要求,但这使得嵌套的字典处理起来更容易。倘若表示每位用户的字典都包含不同的键,for 循环内部的代码将更复杂。
小结
1、字典用放在花括号{}
中的一系列键—值对表示。键和值之间用冒号:
分隔,而键—值对之间用逗号,
分隔, 例如 alien_0 = {'color': 'green', 'points': 5}
。
2、可以直接用=
赋值的方法添加、修改键—值对。可使用del
语句将相应的键—值对彻底删除。
3、利用方法items()
,将键—值对赋给变量key
和value
,并利用for 循环遍历字典,例如 for key, value in user_0.items():
。
4、可以利用方法key()
提取字典的键,例如 for name in favorite_languages.keys():
。
5、可使用函数sorted()
来获得按特定顺序排列的键列表,例如 for name in sorted(favorite_languages.keys()):
。
6、可以利用方法value()
提取字典的值,并使用集合set
剔除重复项,例如 for language in set(favorite_languages.values()):
。
7、可以通过嵌套将列表和字典结合使用。