初识字典

字典(Dictionary) 类似于 C++ 中的 Map ,内部都是键值对,用于创建一类对象对另一类对象的映射

但不同的是,字典中的映射类型是不固定的(键与键之间,值与值之间的类型可以不相同)

值可以取任何数据类型(甚至可以嵌套字典),但键必须是不可变的,如字符串,数字

创建字典

使用大括号 {} 创建

1
2
personInfo = {'name': 'Tom', 'age': 18, 'hobby': ['reading', 'running', 'swimming']}
print(personInfo) # {'name': 'Tom', 'age': 18, 'hobby': ['reading', 'running', 'swimming']}

技巧:写成多行

在某些场景下,写成多行能让内容更加清晰明了,例如这里统计几个人最喜欢的编程语言

1
2
3
4
5
6
favoriteLanguages = {
'jen': 'python',
'sarch': 'c',
'edward': 'ruby',
'phil': 'python',
}

访问字典

键->值

一般写法

使用中括号 []

1
2
3
4
personInfo = {'name': 'Tom', 'age': 18, 'hobby': ['reading', 'running', 'swimming']}
print(personInfo['name']) # Tom
print(personInfo['age']) # 18
print(personInfo['hobby']) # ['reading', 'running', 'swimming']

使用get()方法

上面的写法满足绝大多数情况,但是有时可能会引发问题:指定的键不存在时会直接报错

而某些情况是不能完全确定一个键是有没有对应的值的,这时就要用到 get() 方法

1
2
3
4
5
6
7
personInfo = {'name': 'Tom', 'age': 18, 'job': 'student'}
job = personInfo.get('job', "Tom didn't have a job yet!")
print(job) # student

del personInfo['job']
job = personInfo.get('job', "Tom didn't have a job yet!")
print(job) # Tom didn't have a job yet!

get() 的第一个参数是要查询的键,第二个参数是键不存在时返回的默认值

遍历

这里以上面的 最喜欢的编程语言 为例

1
2
3
4
5
6
favoriteLanguages = {
'jen': 'python',
'sarch': 'c',
'edward': 'ruby',
'phil': 'python',
}

遍历所有键值对

1
2
for key , value in favoriteLanguages.items():
print('Key: '+key+' Value: '+value)
1
2
3
4
Key: jen Value: python
Key: sarch Value: c
Key: edward Value: ruby
Key: phil Value: python

遍历所有键

1
2
for name in favoriteLanguages.keys():
print(name)
1
2
3
4
jen
sarch
edward
phil
技巧:排序

Python3.7 开始,将以插入元素的顺序遍历,但我们也可以重新排序,例如下面的方法

1
2
for name in sorted(favoriteLanguages.keys()):
print(name)
1
2
3
4
edward
jen
phil
sarch

遍历所有值

1
2
for language in favoriteLanguages.values():
print(language)
1
2
3
4
python
c
ruby
python
技巧:剔除重复项

我们可以运用 集合(set) 的性质来剔除重复项

集合将在下一篇中讲解

1
2
for language in set(favoriteLanguages.values()):
print(language)
1
2
3
python
ruby
c

添加键值对

直接使用 字典名[键]=值 即可

1
2
3
4
5
6
7
8
9
10
favoriteLanguages = {
'jen': 'python',
'sarch': 'c',
'edward': 'ruby',
'phil': 'python',
}
print(favoriteLanguages)

favoriteLanguages['mike'] = 'java'
print(favoriteLanguages)
1
2
{'jen': 'python', 'sarch': 'c', 'edward': 'ruby', 'phil': 'python'}
{'jen': 'python', 'sarch': 'c', 'edward': 'ruby', 'phil': 'python', 'mike': 'java'}

修改键值对

同样,直接使用 字典名[键]=值 即可

1
2
3
4
5
6
7
8
9
10
favoriteLanguages = {
'jen': 'python',
'sarch': 'c',
'edward': 'ruby',
'phil': 'python',
}
print(favoriteLanguages)

favoriteLanguages['jen'] = 'java'
print(favoriteLanguages)
1
2
{'jen': 'python', 'sarch': 'c', 'edward': 'ruby', 'phil': 'python'}
{'jen': 'java', 'sarch': 'c', 'edward': 'ruby', 'phil': 'python'}

删除键值对

使用 del 字典名[键]

1
2
3
4
5
6
7
8
9
10
favoriteLanguages = {
'jen': 'python',
'sarch': 'c',
'edward': 'ruby',
'phil': 'python',
}
print(favoriteLanguages)

del favoriteLanguages['jen']
print(favoriteLanguages)
1
2
{'jen': 'python', 'sarch': 'c', 'edward': 'ruby', 'phil': 'python'}
{'sarch': 'c', 'edward': 'ruby', 'phil': 'python'}