一、一个简单的字典
来介绍一个人的信息。
python
people={'name':'Lucy','age':20}
print(people['name']) # Lucy
print(people['age']) # 20
字典people存储了这个人的姓名和年龄。最后两行代码访问并显示这些信息。
二、使用字典
在Python中,字典 (dictionary)是一系列键值对 (key-value pair)。每个键都与一个值关联,可以使用键来访问与之关联的值。与键相关联的值可以是数、字符串、列表乃至字典。事实上,可将任意Python对象用作字典中的值。
在python中,字典用放在花括号({})中的一系列键值对表示,如前面的示例所示:
python
people={'name':'Lucy','age':20}
键值对包含两个相互关联的值。当你指定键时,Python将返回与之关联的值。键和值之间用冒号分隔,而键值对之间用逗号分隔。在字典中,你想存储多少个键值对都可以。
1、访问字典中的值
要获取与键关联的值,可指定字典名并把键放在后面的方括号内:
python
people={'name':'Lucy','age':20}
print(people['name']) # Lucy
2、添加键值对
字典是一种动态结构,可随时在其中添加键值对。要添加键值对,可依次指定字典名、用方括号括起来的键和与该键关联的值。下面来在字典people中添加两项信息:
python
people={'name':'Lucy','age':20}
print(people)
people['position']='ShenYang'
people['sex']='girl'
print(people)
output
{'name': 'Lucy', 'age': 20}
{'name': 'Lucy', 'age': 20, 'position': 'ShenYang', 'sex': 'girl'}
这个字典最终包含4个键值对。字典会保留定义时的元素排列顺序。如果将字典打印出来或遍历其元素,将发现元素的排列顺序与其添加顺序相同。
3、创建一个空字典
可先使用一对花括号定义一个空字典,再分行添加各个键值对。
python
people={}
people['name']='Lucy'
people['age']=20
print(people)
如果要使用字典来存储用户提供的数据或者编写能自动生成大量键值对的代码,通常需要先定义一个空字典。
4、修改字典中的值
要修改字典中的值,可依次指定字典名、用方括号括起来的键和与该键关联的新值。
python
people={'name':'Lucy','age':20}
people['age']=22
5、删除键值对
对于字典中不再需要的信息,可使用del语句将相应的键值对彻底删除。在使用del语句时,必须指定字典名和要删除的键。
python
people={'name':'Lucy','age':20,'position':'ShenYang','sex':'girl'}
print(people)
del people['position']
print(people)
output
{'name': 'Lucy', 'age': 20, 'position': 'ShenYang', 'sex': 'girl'}
{'name': 'Lucy', 'age': 20, 'sex': 'girl'}
6、由类似的对象组成的字典
可以使用字典来存储众多对象的同一种信息。
python
peoples={
'Lucy':'ShenYang',
'David':'TieLing',
'Bob':'England'
}
每个键都是姓名,而每个值都是该人的家乡。当确定需要使用多行来定义字典时,先在输入左花括号后按回车键,再在下一行缩进4个空格,指定第一个键值对,并在它后面加上一个逗号。此后再按回车键,定义好字典后,在最后一个键值对的下一行添加一个右花括号。
7、使用get()来访问值
使用放在方括号内的键从字典中获取感兴趣的值,可能会引发问题:如果指定的键不存在,就将出错。
python
people={'name':'Lucy','age':20,'position':'ShenYang','sex':'girl'}
print(people['hobby'])
这将导致Python显示traceback,指出存在键值错误。
为避免出现这样的错误,可使用get()方法在指定的键不存在时返回一个默认值。get()方法的第一个参数用于指定键,是必不可少的;第二个参数为当指定的键不存在时要返回的值,是可选的:
python
people={'name':'Lucy','age':20,'position':'ShenYang','sex':'girl'}
hobby=people.get('hobby','No hobby value')
print(hobby)
output
No hobby value
如果指定的键有可能不存在,应考虑使用get()方法,而不要使用方括号表示法。在调用get()时,如果没有指定第二个参数且指定的键不存在,Python将返回值None,这个特殊的值表示没有相应的值。
三、遍历字典
字典可用于以各种方式存储信息,因此有多种遍历方式:既可遍历字典的所有键值对,也可只遍历键或值。
1、遍历所有的键值对
使用for循环遍历字典。
python
people={'name':'Lucy','age':20,'position':'ShenYang','sex':'girl'}
for key,value in people.items():
print(key,':',value)
output
name : Lucy
age : 20
position : ShenYang
sex : girl
2、遍历字典中的所有键
在不需要使用字典中的值时,keys()方法很有用。
python
people={'name':'Lucy','age':20,'position':'ShenYang','sex':'girl'}
for key in people.keys():
print(key)
output
name
age
position
sex
如果显式地使用keys()方法能让代码更容易理解,如果省略keys()方法,在遍历字典时,会默认遍历所有的键。在这种循环中,可使用当前的键来访问与之关联的值。
python
people={'name':'Lucy','age':20,'position':'ShenYang','sex':'girl'}
for key in people.keys():
print(key,':',people[key])
output
name : Lucy
age : 20
position : ShenYang
sex : girl
keys()方法并非只能用于遍历:实际上,它会返回一个列表,其中包含字典中的所有键。
3、遍历字典中的所有值
如果你想获得字典包含的值,可使用values()方法。它会返回一个值列表,不包含任何键。
python
people={'name':'Lucy','age':20,'position':'ShenYang','sex':'girl'}
for value in people.values():
print(value)
output
Lucy
20
ShenYang
girl
这种做法提取字典中所有的值,而没有考虑值是否有重复。为剔除重复项,可使用集合(set)。集合中的每个元素都必须是独一无二的。
python
languages={
'Lucy':'java',
'Bob':'python',
'Alice':'java',
'David':'javascript'
}
for language in set(languages.values()):
print(language)
结果是一个没有重复元素的列表。
output
java
python
javascript
四、嵌套
有时候,需要将多个字典存储在列表中或将列表作为值存储在字典中,这称为嵌套。可以在列表中嵌套字典,在字典中嵌套列表,甚至在字典中嵌套字典。
1、字典列表
python
people1={'name':'Lucy','age':20}
people2={'name':'Bob','age':19}
people3={'name':'Alice','age':22}
peoples=[people1,people2,people3]
for person in peoples:
print(person)
output
{'name': 'Lucy', 'age': 20}
{'name': 'Bob', 'age': 19}
{'name': 'Alice', 'age': 22}
2、在字典中存储列表
python
classes={
'teacher':'Wang',
'students':['liming','zhangsan','wanger']
}
for student in classes['students']:
print(student)
output
liming
zhangsan
wanger
每当需要在字典中将一个键关联到多个值时,都可以在字典中嵌套一个列表。
3、在字典中存储字典
可以在字典中嵌套字典,但这可能会让代码变得非常复杂。
python
classes={
'classone': {
'teacher':'wang',
'student':'Lucy'
},
'classtwo': {
'teacher':'zhang',
'student':'Bob'
}
}
for class_name,class_dict in classes.items():
print(class_name,':',class_dict)
output
classone : {'teacher': 'wang', 'student': 'Lucy'}
classtwo : {'teacher': 'zhang', 'student': 'Bob'}