Python——字典
- 列表与元组都是通过索引下标来获取元素值,而字典则是通过键来获取元素值。
- 字典是一种存储键值对的
- 一个字典中的key的类型不一定都一样;
- 一个字典中的value的类型也不必都一样;
- 字典对于key的类型有约束,对于value没约束;
1.创建字典
a = {}
b = dict()
# 创建同时设置初始值
c = {'id':1,'name':'zhang'}
# 书写可以使用多行方式,好看,最后一个键值对的,可写可不写
d = {
'id':1,
'name':'zhang'
}
2.查找字典
- 使用in/not in查找key是否在字典中(in只是判定key是否存在,与value无关)
a = {
'id':1,
'name':'sxl'
}
print('id' in a) # True
print('n' in a) # False
print('sxl' in a) # False
print('sxl' not in a) # True
- 使用[ ]根据key获取value
a = {
'id':1,
'name':'sxl',
100:'成绩'
}
print(a['id']) # 1
注意:对于字典来说,使用in或者[ ]来获取value是比较高效(字典使用了哈希);对于列表来说,使用in比较低效(把整个列表遍历一遍),[ ]较高效
- get取值
get可以取字典里不存在的键,默认返回None值,并且可以提前设置一个默认值
a = {
'id':1,
'name':'sxl',
100:'成绩'
}
print(a.get('id')) # 1
print(a.get(1)) # None
print(a.get(2,100)) # 100
3.新增/修改元素
- key存在,则根据key修改value
- key不存在,则相当于新增键值对
a = {
'id':1,
'name':'sxl',
100:'成绩'
}
# 插入新的键值对
a['score'] = 90
print(a)
# 修改value
a['score'] = 99
print(a)
- 更新字典
d = {
'k1': 11,
2: 22,
True: 33,
None: 44,
3.14: 55
}
d.update({'k1': 1111, 'k3': 33})
print('更新集合后的字典 => ', d) # {'k1': 1111, 2: 22, True: 33, None: 44, 3.14: 55, 'k2': 222, 'k3':
33}
t1 = d.pop(2)
print('弹出键为2的元素后的字典 => ', d) # {'k1': 1111, True: 33, None: 44, 3.14: 55, 'k2': 222, 'k3':
33}
t2 = d.popitem()
print('弹出一个键值对后的字典 => ', d) # {'k1': 1111, True: 33, None: 44, 3.14: 55, 'k2': 222}
print('弹出的键值对 => ', t2) # ('k3', 33)
d.clear()
print('清空字典内容 => ', d) # {}
4.删除字典
- pop删除
a = {
'id':1,
'name':'sxl',
100:'成绩'
}
# 删除字典
a.pop('name') # {'id':1,100:'成绩'}
print(a)
- popitem从末尾开始删除一个字典
a = {
'id':1,
'name':'sxl',
100:'成绩'
}
# 删除字典
a1 = a.popitem()
print(a) # {'id':1,'name':'sxl'}
print(a1) # (100,'成绩') 以元组形式
- del删除
a = {
'id':1,
'name':'sxl',
100:'成绩'
}
# 删除字典
del a[100]
print(a) # {'id':1,'name':'sxl'}
5.字典的遍历
- 使用for循环
a = {
'id':1,
'name':'sxl',
100:'成绩'
}
for key in a:
print(key,a[key])
- keys获取key
注意:keys获取到字典中所有的key;values获取到字典中所有的value;items获取到字典中所有键值对
a = {
'id':1,
'name':'sxl',
100:'成绩'
}
print(a.keys()) # dict_keys(['id','name',100]) 自定义的类型,可当作列表使用
print(a.values()) # dict_values([1,'sxl','成绩'])
print(a.items()) # dict_items([('id',1),('name','sxl'),(100,'成绩')]) 列表一样的结果,每个元素又是一个元组,元组里面包含键和值
for key,value in a.items():
print(key,value)
# id 1
# name sxl
# 100 成绩
6.合法key类型
python提供一个hash函数打印hash值
print(hash(0)) # 整型
print(hash(3.14)) # 浮点
print(hash('sxl')) # 字符串
print(hash(True)) # 布尔
print(hash((1,2,3))) # 计算元组
不能hash的类型:列表、字典
结论:不可变的对象一般可哈希,可变的对象一般不可哈希