五,字典(python)
字典的简单认识
1.一个简单的字典
来看一个包含外星人的游戏,这些外星人的颜色和分数各不相同。下面是一个简单的字典,存储有关特定外星人的信息
alien_0 = {'color' : 'green', 'points': 5}
print(alien_0['color'])
print(alien_0['points'])
输出
green
5
2.使用字典
在python中,字典是一系列的键值对。每个键都与一个值相关联,你可使用键来访问相关联的值。与键相关联的值可以是数字,字符串,列表乃至字典。事实上,可将任何python对象作为字典中的值。
在 pyhon中,字典用放在花括号{}中的一系列键值对表示,如前面示例
alien_0 = {'color' : 'green', 'points': 5}
键值对是两个相关联的值。指定键时,python将返回与之相关联的值。键与值之间用:隔开,而键值对之间用,隔开。在字典中,想存储多少个键值对都无所谓。
最简单的字典只有一个键值对。
3.添加键值对
要添加键值对,可依次指定字典名,用方括号括括起来的键和相关联的值。
alien_0 = {'color': 'green', 'points': 5}
print(alien_0)
alien_0['position_x'] = 2
alien_0['position_y'] = 4
print(alien_0)
输出
{'color': 'green', 'points': 5}
{'color': 'green', 'points': 5, 'position_x': 2, 'position_y': 4}
字典中键值对的排列顺序与定义时相同。
在空字典中添加键值对有时候可提供便利,空字典只有一个{}大括号。
alien_0 = {}
alien_0['color'] = 'green'
alien_0['points'] = '5'
print(alien_0)
输出
{'color': 'green', 'points': 5}
3.修改字典中的值
要修改字典中的值,可依次指定字典名,用方括号[]括起来的键和要修改的值。
eg:
alien_0 = {'color' : 'green', 'points': 5}
alien_0['color'] = 'yellow'
print(alien_0['color'])
输出
yellow
4.删除键值对
删除 需要使用del语句,使用del语句时,必须指定字典名和键。
alien_0 = {}
alien_0['color'] = 'green'
alien_0['points'] = '5'
print(alien_0)
del alien_0['points']
print(alien_0)
输出
{'color': 'green', 'points': '5'}
{'color': 'green'}
使用get()来访问值
使用放在方括号内的键来获取值时,可能会发生错误。如果指定的键不存在,就会发生错误
eg:
alien_0 = {}
alien_0['color'] = 'green'
alien_0['points'] = '5'
print(alien_0['speed'])
输出
print(alien_0['speed'])
KeyError: 'speed'
就会出现keyerror(键值错误)
就字典而言,我们可以使用get()在指定键不存在时,返回一个默认值。
方法get()的第一个参数用于指定键,是必不可少的;第二个参数为指定的键不存在返回的默认值
eg:
alien_0 = {}
alien_0['color'] = 'green'
alien_0['points'] = '5'
print_value = alien_0.get('speed', 'not find speed')
print(print_value)
输出
not find speed
若该键存在则返回该键相关联的值。
alien_0 = {}
alien_0['color'] = 'green'
alien_0['points'] = '5'
print_value = alien_0.get('points', 'not find speed')
print(print_value)
输出
5
如果指定的键有可能不存在,应考虑使用方法get(),而不要使用方括号表示法。
调用get()时,如果第二个参数没有指定且指定的键不存在,python将返回值None。这个特殊值表示没有相应的值。None并非错误,而是一个表示所需值不存在的特殊值。在后面的文章中,我将介绍他的其他用途。
2.遍历字典
1,遍历所有键值对
看到遍历首先要想到的当然是for循环了。
这里以一个网站用户信息为例子。
users_0 = {
'name': 'xiao_wang',
'first': 'xiao',
'last': 'wang',
}
for key,value in users_0.items():
print(f"\nkey: {key}")
print(f"value: {value}")
输出
key: name
value: xiao_wang
key: first
value: xiao
key: last
value: wang
要遍历字典的for循环,可声明两个变量,用于存储键值对的键和值,本例中用key存储键,value存储值,这两个变量名称可以使用任意名称。
方法items()返回一个键值对列表。接下来,for循环依次将每一个键值对赋给指定的两个变量。
2.遍历字典中的所有键
若只需要键而不需要值,则可利用方法keys()来获取键。keys()返回的是一个只有键的列表。
users_0 = {
'name': 'xiao_wang',
'first': 'xiao',
'last': 'wang',
}
for xxx in users_0.keys():
print(xxx.title())
输出
Name
First
Last
3.遍历字典中的所有值
与遍历字典中的所有键类似,遍历所有值需要使用方法values(),它返回一个只有值的列表。
只需把上个代码的kesy改为values()
users_0 = {
'name': 'xiao_wang',
'first': 'xiao',
'last': 'wang',
}
for xxx in users_0.values():
print(xxx.title())
输出
Xiao_Wang
Xiao
Wang
若列表中有重复的值,则可使用集合(set),集合中的每一个元素都是独一无二的。通过集合我们可以剔除列表中的重复元素,
eg:
languages = {'c', 'python', 'java', 'python', 'c'}
for language in set(languages):
print(language)
print(set(languages))
输出
c
python
java
{'c', 'python', 'java'}
集合与列表的区别是列表用方括号,集合用花括号。
集合与字典的区别是字典中有键值对,集合中无键值对。
嵌套
有时候我们需要把字典存储在列表中或将列表存储在字典中,这称之为嵌套。
在列表中存储字典
eg:
alien_1 = {'color': 'green', 'points': 5}
alien_2 = {'color': 'red', 'points': 10}
alien_3 = {'color': 'yellow', 'points': 15}
aliens = [alien_1, alien_2, alien_3]
for alien in aliens:
print(alien)
输出
{'color': 'green', 'points': 5}
{'color': 'red', 'points': 10}
{'color': 'yellow', 'points': 15}
2.在字典中存储列表
eg:
user = {
'name': 'xiao_wang',
'birthdays': ['year', 'month', 'day'],
}
for birthday in user['birthdays']:
print(birthday)
输出
year
month
day
3.在字典中存储字典
eg:
users = {
'user1': {
'name':'xiao_wang',
'location': 'beijing',
},
'user2': {
'name': 'xiao_zhao',
'location': 'shanghai',
}
}
for user, information in users.items():
print(f"\nuser: {user}")
print(f"name: {information['name']}")
print(f"location: {information['location']}")
输出
user: user1
name: xiao_wang
location: beijing
user: user2
name: xiao_zhao
location: shanghai