在Python中,字典是一系列键值对。每个键都与一个值相关联,可使用键来访问相关联的值。与键相关联的值可以是数、字符串、列表乃至字典。事实上,可将任何Python对象用作字典中的值。
字典用放在 {} 中的一系列键值对表示
alien = {'color': 'green', 'points': 5}
在该字典中,'color' 和 'points' 是键,而 'green' 和 5 是对应的值。
使用字典
访问字典中的值
要获取与键相关的值,可依次指定字典名和放在方括号内的键
alien = {'color': 'green', 'points': 5}
print(alien['color'])
输出 green
添加键值对
字典是一种动态结构,可随时在其中添加键值对。要添加键值对,可依次指定字典名、用方括号括起的键和相关联的值。
alien = {'color': 'green', 'points': 5}
alien['x_position'] = 0
alien['y_position'] = 25
print(alien)
输出结果
{'color': 'green', 'points': 5, 'x_position': 0, 'y_position': 25}
修改字典的值
要修改字典中的值,可依次指定字典名、用方括号括起的键,以及与该键相关联的新值。
alien = {'color': 'green', 'points': 5}
alien['color'] = 'yellow'
print(alien)
输出结果
{'color': 'yellow', 'points': 5}
删除键值对
对于字点中不需要的信息,可使用del语句将其相应的键值对彻底删除。使用del语句时,必须指定字典名和要删除的键。
alien = {'color': 'green', 'points': 5}
del alien['points']
print(alien)
输出结果
{'color': 'green'}
使用 get() 来访问值
方法 get() 有两个参数,第一个参数用于指定键,第二个参数指定键不存在时要返回的值,是可选的。
alien = {'color': 'green', 'points': 5}
point_value = alien.get('color', 'No point value assigned.')
print(point_value)
输出 green
注意:调用 get()时,如果没有指定第二个参数且指定的键不存在,Python将返回值
遍历字典
遍历所有键值对
使用 for循环,可声明两个变量,用于存储键值对中的键和值。使用方法 items()
alien = {'color': 'green', 'points': 5}
for key, value in alien.items():
print(f"{key} {value}")
输出结果
color green
points 5
遍历字典中的所有键
在不需要使用字典中的值时,可以使用方法 keys()
alien = {'color': 'green', 'points': 5}
for key in alien.keys():
print(key)
输出结果
color
points
等价于
for key in alien:
print(key)
显式地使用方法 keys()可以使代码更容易理解,但是也可以省略。
按特定的顺序遍历字典中所有的键
要以特定的顺序返回元素,一种方法是在 for循环中对返回的键进行排序。为此,可使用函数 sorted()来获得按特定顺序排列的键列表的副本
favorite_language = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
for name in sorted(favorite_language.keys()):
print(name)
输出结果
edward
jen
phil
sarah
遍历字典中的所有值
如果主要对字典包含的值感兴趣,可使用方法 values()来返回一个值列表,不包含任何键。
favorite_language = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
for language in favorite_language.values():
print(language)
输出结果
python
c
ruby
python
这种做法提取字典中所有值,而没有考虑是否重复。涉及的值很少时,这也许不是问题,但如果被调查者很多,最终的列表可能包含大量重复项。为剔除重复项,可使用集合 set。集合中的每个元素都必须是独一无二的。
for language in set(favorite_language.values()):
print(language)
python
ruby
c
注意:可使用一对花括号直接创建集合,并在其中用逗号分隔元素:
languages = {'python', 'ruby', 'python', 'c'}
集合和字典很容易混淆,因为它们都是用一对花括号定义的。当花括号内没有键值对时,定义的很可能是集合。不同于列表和字典,集合不会以特定的顺序存储元素。
嵌套
有时候需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为嵌套。我们可以在列表中嵌套字典、在字典中嵌套列表、在字典中嵌套字典。
字典列表
在列表中嵌套字典
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(aliens)
输出结果
{'color': 'green', 'points': 5}
{'color': 'yellow', 'points': 10}
{'color': 'red', 'points': 15}
在字典中存储列表
favorite_languages = {
'jen': ['python', 'ruby'],
'sarah': ['c'],
'edward': ['ruby', 'go'],
'phil': ['python', 'haskell'],
}
for name, language in favorite_languages.items():
print(name)
print(language)
输出结果
jen
['python', 'ruby']
sarah
['c']
edward
['ruby', 'go']
phil
['python', 'haskell']
[chazz@yoga14s Python]$
在字典中存储字典
如果有多个网站用户,每个都有独特的用户名,可在字典中将用户名作为键,然后将每位用户的信息存储在一个字典中,并将该字典作为与用户名相关联的值。
users = {
'aeinstein': {
'first': 'albert',
'last': 'einstein',
'location': 'princeton',
},
'mcurie': {
'first': 'marie',
'last': 'curie',
'location': 'paris',
},
}
for username, user_info in users.items():
print(username)
print(user_info)
aeinstein
{'first': 'albert', 'last': 'einstein', 'location': 'princeton'}
mcurie
{'first': 'marie', 'last': 'curie', 'location': 'paris'}