Python学习 - 语法入门:https://blog.csdn.net/wanzijy/article/details/125287855
Python学习 - 数据类型:https://blog.csdn.net/wanzijy/article/details/125341568
Python学习 - 流程控制:https://blog.csdn.net/wanzijy/article/details/125400906
Python学习 - 运算符(操作符):https://blog.csdn.net/wanzijy/article/details/125387919
Python学习 - 列表:https://blog.csdn.net/wanzijy/article/details/125457990
Python学习 - 字典:https://blog.csdn.net/wanzijy/article/details/125567225
Python学习 -元组和集合:https://blog.csdn.net/wanzijy/article/details/125577609
Python学习 - 函数(1):https://blog.csdn.net/wanzijy/article/details/125669084
Python学习 - 函数(2):https://blog.csdn.net/wanzijy/article/details/125739981
Python学习 - 类与对象:https://blog.csdn.net/wanzijy/article/details/125826952
Python学习 - 面向对象之封装:https://blog.csdn.net/wanzijy/article/details/125902925
Python学习 - 面向对象之继承:https://blog.csdn.net/wanzijy/article/details/125963829
Python学习 - 面向对象之多态:https://blog.csdn.net/wanzijy/article/details/127140632
Python - 文件操作(1):https://blog.csdn.net/wanzijy/article/details/127099071
Python - 文件操作(2):https://blog.csdn.net/wanzijy/article/details/127150189
Python学习 - 垃圾回收、特殊方法和模块:https://blog.csdn.net/wanzijy/article/details/126202999
Python学习 - 异常处理:https://blog.csdn.net/wanzijy/article/details/126803672
1. 简介
属于一种新的数据结构,称为映射(mapping)
和列表类似,都是用来存储对象的容器
列表存储数据的性能很好,但是查询数据的性能很差
在查询元素时,字典的效率是非常快的
在字典中可以保存多个对象,每个对象都会有一个唯一的名字
这个唯一的名字,称其为键(key),通过key可以快速的查询value
这个对象,我们称其为值(value)
所以字典,也称为键值对(key-value)结构
每个字典中都可以有多个键值对,而每一个键值对我们称其为一项(item)
2. 使用
2.1 创建
- { } 直接创建
- dict() 创建
- 也可以将一个包含有双值子序列的序列转换为字典
- 双值序列:序列中只有两个值
- 子序列:如果序列中的元素也是序列,那么我们就称这个元素为子序列
a = {
'name' : '张三',
'age' : 18
}
print(a) # {'name': '张三', 'age': 18}
a = dict(name = '李四', age = 18, gender = '男') # 这种方式创建的字典都是字符串
print(a) # {'name': '李四', 'age': 18, 'gender': '男'}
a = dict([('name', '王五'), ('age', '24')])
print(a) # {'name': '王五', 'age': '24'}
字典里的键可以是任意的不可变对象(int str bool tuple),但是不能重复。如果出现重复的,后边的会替换前面的
字典的键一般都是字符串
字典里的值可以是任意对象
2.2 获取
- 通过“ [ ] ”和 key 直接获取
- 使用 get(key, [default]) 函数
b = {'name' : '张三', 'age' : '18'}
# 注意引号; 如果使用了字典中不存在的键,会抛出异常
print(b['name']) # 张三
# 使用get函数,如果获取的键不存在,则返回None
print(b.get('name')) # 张三
print(b.get('hello')) # None
print(a.get('hello', '键不存在就返回该默认值')) # 键不存在就返回该默认值
2.3 修改
- 通过“ [ ] ”和 key 直接修改
- setdefault(key, value)
- 如果key存在,则返回key的值,不会对字典做任何操作
- 如果不存在,则向字典中添加这个key,并设置value
- 使用 update([other])
- 将其他的字典中的 key-value 添加到当前字典中
- 如果有重复的 key,则后面的会替换掉当前的
a = {'name' : '张三', 'age' : '18'}
a['name'] = '刘柳' # 存在则覆盖
print(a) # {'name': '刘柳', 'age': '24'}
a['address'] = '广东省' # 不存在就在字典中添加该 key-value
print(a) # {'name': '刘柳', 'age': '24', 'address': '广东省'}
a.setdefault('name', '小黄')
print(a.setdefault('name', '小黄')) # 刘柳
print(a) # {'name': '刘柳', 'age': '24', 'address': '广东省'}
a.setdefault('gender', '男')
print(a) # {'name': '刘柳', 'age': '24', 'address': '广东省', 'gender': '男'}
b = {
'a': 1,
'b': 2,
'age': 89
}
a.update(b)
print(a) # {'name': '刘柳', 'age': 89, 'address': '广东省', 'gender': '男', 'a': 1, 'b': 2}
2.4 删除
- del([key])
- 根据 key 删除值
- 如果 key 不存在,会报错
- popitem()
- 随机删除字典中的一个键值对,一般都会删除最后一个键值对
- 删除后,会将删除后的 key-value 作为返回值返回
- 返回的是一个元组,元组中有两个元素,第一个元素是key,第二个元素是value
- 删除空字典时,会抛出异常
- pop(key, [default])
- 根据 key 删除 value
- 会将删除的 value 返回
- 如果删除不存在的 key,会抛出异常。如果指定了默认值,再删除不存在的key,则不会报错,而是直接返回默认值
- clear() 用来清空字典
a = {'name': '刘柳', 'age': 89, 'address': '广东省', 'gender': '男', 'a': 1, 'b': 2'}
del a['a']
result = a.popitem()
print(result) # ('b', 2)
result1 = a.pop('gender')
print(result1) # 男
result2 = a.pop('asd', '默认值')
print(result2) # 默认值
a.clear()
print(a) # {}
2.5 其他
len()
- 获取字典中键值对的个数
- 语法: len(字典)
a = {
'name' : '张三',
'age' : 18
}
print(len(a)) # 2
in 检查字典中是否包含指定的键,存在返回True,反之
not in 检查字典中是否不包含指定的键,不存在返回True,反之
b = {'name' : '张三', 'age' : '18'}
print('name' in b) # True
copy()
- 用于对方法进行浅复制
- 复制以后的对象,和原对象是独立的,修改一个不会影响另一个
- 浅复制,只会简单的复制对象内部的值,如果值也是一个可变对象,这个可变对象不会被复制
a = {'name' : '张三', 'age' : '18'}
b = a.copy() # 此时修改b的值不会影响a,修改a的值也不会影响b
a = {
'id' : '1',
'people' : {
'name' : '张三',
'age' : '18'
}
}
b = a.copy()
print(a) # {'id': '1', 'people': {'name': '张三', 'age': '18'}}
print(b) # {'id': '1', 'people': {'name': '张三', 'age': '18'}}
a['people']['name'] = '李四' # 注意,此时a和b中的’people’都会同时改变,因为’people’也是一个可变对象
print(a) # {'id': '1', 'people': {'name': '李四', 'age': '18'}}
print(b) # {'id': '1', 'people': {'name': '李四', 'age': '18'}}
3. 遍历
keys() 以序列的形式返回字典中所有的 key
a = {
'name' : '张三',
'age' : '18'
}
print(a.keys()) # dict_keys(['name', 'age'])
values() 以序列的方式返回字典中所有的 value
a = {
'name' : '张三',
'age' : '18'
}
print(a.values()) # dict_values(['张三', '18'])
items() 以序列的方式,返回字典中所有的项。序列中包含有双值子序列,双值分别是字典中的 key 和 value
a = {
'name' : '张三',
'age' : '18'
}
for key, value in a.items() :
print(key, value)
# name 张三
# age 18
利用 keys() 和 [ ] 遍历
a = {
'name' : '张三',
'age' : '18'
}
for key in a.keys() :
print(key, a[key])
# name 张三
# age 18