数据类型划分:
可变数据类型:不可哈希,list、dict、set
不可变数据类型:可哈希,元组、bool、数字、str
字典的key必须是不可变数据类型
字典特点:二分法查找,查询速度快,比列表快;储存大量关系型数据;无序(3.5及以前版本,有序和无序区别在于遍历输出元素顺序可能不一样)
字典增删改查:
增:
直接赋值增加或修改:k存在则覆盖,不存在则增加
dict1 = {
'name':'xinian',
'age':18,
}
dict1['hight'] = 181
setdefault(k, value=None):k存在则不替换,k不存在则增加
删:
按照key删:pop(key),返回删除key对应的value,当key不存在时会报错
pop(key, None)当key存在则删除,不存在不报错
pop(key, 'error key') 可自定义,不存在key时返回第二个自定义参数
随机删除:popitem() 暂未发现实际意义,返回删除的键值元组(key, value)
清空字典:clear()
删除字典或者字典内元素:del xxx
在循环中不能删除字典键值对:可把字典键存在列表中,遍历列表的时候删除字典
dict1 = {1:'1', 2:'2', 3:'3', 4:'4', 5:'5', 6:'6'}
for i in dict1:
del dict1[i] # RuntimeError: dictionary changed size during iteration
# 通过遍历列表来删除
dict1 = {1:'1', 2:'2', 3:'3', 4:'4', 5:'5', 6:'6'}
l = []
for i in dict1:
l.append(i)
for i in l:
del dict1[i]
改:
直接赋值;
update():覆盖增加,场景cookie、session更新
dict1 = {'name':'xinian', 'age':18, 'sex':'man'}
dict2 = {'name':'test', 'age':19}
dict2.update(dict1)
print(dict2) # {'name': 'xinian', 'age': 18, 'sex': 'man'}
查:
dict.keys()
dict.values()
dict.items()
dict1 = {'name':'xinian', 'age':18, 'sex':'man'}
print(dict1.keys()) # dict_keys(['name', 'age', 'sex'])
print(dict1.values()) # dict_values(['xinian', 18, 'man'])
print(dict1.items()) # dict_items([('name', 'xinian'), ('age', 18), ('sex', 'man')])
for i in dict1:
print(i) # 输出key,和for i in dict1.keys()一样
for i in dict1.values():
print(i) # 输出value
for i in dict1.items():
print(i) # 输出 键值元组 ('name', 'xinian') ('age', 18) ('sex', 'man')
for k, v in dict1.items():
print(k, ':', v) # name : xinian age : 18 sex : man
get():
dict.get(key),当key不存在时不会报错,返回None
可以定义key不存在时返回值 dict.get(key, 'xxx')