字典(类似 go 中的 map)
- 字典的应用场景
- 创建字典的语法
- 字典常见操作
- 字典的循环遍历
1 字典的应用场景
思考1: 如果有多个数据,例如:"Tom,男,20,如何快速存储?
答: 列表
list1 = ['tom','男','20']
思考2:如何查找到数据’Tom’ ?
答: 查找到下标为 0 的数据即可
list1[0]
思考3:如果将来数据顺序发生变化,如下所示,还能用 list1[0]
访问到数据 Tom
吗?
答: 不能,数据 Tom
此时下标为2。
但是在代码中我们希望尽可能少的修改代码,如果需要较多修改的话那么我们的代码改动就太多了
list1 = ['男','tom','20']
思考4: 数据顺序发生变化,每个数据的下标也会随之变化,如何保证数据顺序变化前后能使用同一的
标准找数据呢?
答:字典,字典里面的数据是以键值对形式出现,字典数据和数据顺序没有关系,即字典不支持下标.
后期无论数据如何变化,只需要按照对应的键的名字查找数据即可。
2 创建字典的语法
字典特点
- 符号为大括号
- 数据为键值对形式出现
- 各个键值对之间用逗号隔开
# 有数据字典
dict1 = {'name':'tom','age':29,'gender':'男'}
# 空字典
dict2 = {}
# 创建空字典
dict3 = dict()
# 字典赋值
dict4 = dict3
print(type(dict1))
print(dict1)
print(dict2)
print(dict3)
print(dict4)
[15:22:21 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
<class 'dict'>
{'name': 'tom', 'age': 29, 'gender': '男'}
{}
{}
{}
注意:
一般称冒号前面的为键(key),冒号后面的成为值(value)
3 字典常见操作
3.1 增
写法:字典序列 [key]
= 值
注意:如果 key
存在则修改这个 key
对应的值; 如果 key
不存在则新增此键值对
注意:字典为可变数据类型
# 创建 dict1 的字典
dict1 = {'name':'tom','age':29,'gender':'男'}
# 在原有的 key 在进行赋值会修改上面的 tom
dict1['name'] = 'zhangsan'
print(dict1)
# 新增一个 id = 100 的键值对
dict1['id'] = 100
print(dict1)
[10:24:33 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
{'name': 'zhangsan', 'age': 29, 'gender': '男'}
{'name': 'zhangsan', 'age': 29, 'gender': '男', 'id': 100}
3.2 删除
- del()/del:删除字典或删除字典中指定的键值对
# 创建 dict1 的字典
dict1 = {'name':'tom','age':29,'gender':'男'}
# 指定删除 age 的 key
del dict1["age"]
print(dict1)
# 可以看到 age 已经没有了
[10:24:33 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
{'name': 'tom', 'gender': '男'}
- clear():清空字典
# 创建 dict1 的字典
dict1 = {'name':'tom','age':29,'gender':'男'}
dict1.clear()
print(dict1)
# 输出为空
[10:35:44 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
{}
3.3 修改
写法:字典序列[key] = 值
注意: 如果key存在则修改这个key对应的值 ; 如果key不存在则新增此键值对。
- 修改
# 创建 dict1 的字典
dict1 = {'name':'tom','age':29,'gender':'男'}
# 修改 name 字段为 lisi
dict1['name'] = 'lisi'
print(dict1)
[10:37:59 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
{'name': 'lisi', 'age': 29, 'gender': '男'}
- 新增
- 可以看到由于
dict1
中没有 id 字段所以就新增了一个 id 字段
- 可以看到由于
# 创建 dict1 的字典
dict1 = {'name':'tom','age':29,'gender':'男'}
# 新增 id
dict1['id'] = 100
print(dict1)
[10:39:59 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
{'name': 'lisi', 'age': 29, 'gender': '男', 'id': 100}
3.4 查
3.4.1 key 值查找
如果当前查找的key存在,则返回对应的值;否则则报错
# 创建 dict1 的字典
dict1 = {'name':'tom','age':29,'gender':'男'}
# 通过指定 key 查到对应值
print(dict1['name'])
# dict1 中没有 id 字段,所以查找报错
print(dict1['id'])
# 报错 keyError id
[10:41:38 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
tom
Traceback (most recent call last):
File "/root/py-demo/day-1/test.py", line 8, in <module>
print(dict1['id'])
KeyError: 'id'
3.4.2 get()
- 语法
字典序列.get(key,默认值)
注意:如果当前查找的key不存在则返回第二个参数(默认值),如果省略第二个参数,则返回 None。
# 创建 dict1 的字典
dict1 = {'name':'tom','age':29,'gender':'男'}
# 通过 get() 获取
print(dict1.get('name'))
print(dict1.get('age'))
# id 在 dict1 中并没有,但是由于设置了 100 的 value 所以返回 100
print(dict1.get('id',100))
# 由于在 dict1 中没有 id 的值所以返回 none
print(dict1.get('id'))
[10:53:00 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
tom
29
100
None
3.4.3 keys()
# 创建 dict1 的字典
dict1 = {'name':'tom','age':29,'gender':'男'}
# 通过 keys 获取 dict1 字典的数据
# 返回可迭代对象
print(dict1.keys())
[10:57:50 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
dict_keys(['name', 'age', 'gender'])
3.4.4 value()
# 创建 dict1 的字典
dict1 = {'name':'tom','age':29,'gender':'男'}
# 通过 values 获取字典数据
print(dict1.values())
[11:05:50 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
dict_values(['tom', 29, '男'])
3.4.5 items()
# 创建 dict1 的字典
dict1 = {'name':'tom','age':29,'gender':'男'}
# 通过 items 函数获取,查找字典中所有键值对,返回可迭代对象,里面的数据为元组,元组数据1是字典的 key,元组数据 2 是字典 key 对应的值
print(dict1.items())
[11:10:56 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
dict_items([('name', 'tom'), ('age', 29), ('gender', '男')])
4 字典的循环遍历
4.1 遍历字典的 key
# 创建 dict1 的字典
dict1 = {'name':'tom','age':29,'gender':'男'}
# 通过 for 循环遍历 dict1,输出 key
for key in dict1.keys():
print(key)
[11:12:52 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
name
age
gender
4.2 遍历字典的 value
# 创建 dict1 的字典
dict1 = {'name':'tom','age':29,'gender':'男'}
# 通过 values() 函数进行遍历
for value in dict1.values():
print(value)
[14:11:50 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
tom
29
男
4.3 遍历字典元素
# 创建 dict1 的字典
dict1 = {'name':'tom','age':29,'gender':'男'}
# 通过 items 函数获取字典元素
for d in dict1.items():
print(d)
[14:12:59 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
('name', 'tom')
('age', 29)
('gender', '男')
4.4 遍历字典键值对
# 创建 dict1 的字典
dict1 = {'name':'tom','age':29,'gender':'男'}
# (method) def items() -> dict_items[str, Any]
# items() 函数返回可迭代对象,内部是元组,元组为 2 个数据
# 元组数据 1 是字典的 key,数据 2 为字典 value
for k,v in dict1.items():
print(f'k={k},v={v}')
[14:21:23 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
k=name,v=tom
k=age,v=29
k=gender,v=男
5 总结
- 定义字典
dict1 = {'name':'py','age':'30'}
dict2 = {}
dict3 = dict()
- 常见操作
- 增改
字典序列[key] = 值
-
查找
- 字典序列[key]
- keys()
- values()
- items()