a) Key必须是可哈希数据类型
b) Value可以是任何数据类型
c) 字典查找速度快,是因为在内存中key被哈希成数字,查找key时用了二分查找法;列表慢是因为用for循环一个一个查
d) 字典是无序的
e) 字典用于存储大量关系型数据
二 字典的增
a) dict1[key] = value
没有这个key时是新增;有这个key时是修改
b) dict1.default(key)
参数key后不给参数value时,就是{key:None}
1. 如果原字典中没有这个key,就是新增{key:None}
2. 如果原字典中有这个key不管原始value是None还是非None,都不会改变原来的value,也不报错
c) dict1.default(key,value)
给参数value
1. 如果原字典中没有这个key,就是新增{key:value}
2. 如果原字典中有这个key不管原始value是None还是非None,都不会改变原来的value,也不报错
三 字典的删:
a) 按key删:
i. dict.pop(key)#字典不支持pop(),不能不带参数,因为字典是无序的
字典的key就相当于列表的index
1. 如果key不在字典中存在,会报错
2. 如果key存在,会返回key对应的value并删除这对键值对
ii. dict.pop(key,None)
1. 如果key存在,就删除这对键值对
2. 如果key不存在,不会报错,会返回key后面的那个None
iii. dict.pop(key,任意数据)
1. 如果key存在,就删除这对键值对
2. 如果key不存在,不会报错,会返回key后面的那个参数(任意数据)
iv.del dict[key]
1. 如果key不存在会报错
2. 如果key存在,会删除相应的键值对
b) 随机删除一对键值对:
dict.popitem()#有返回值,返回一个元组(key,value)
c) 清空字典:
dict.clear()
d) 从内存中直接删除字典:
del dict
a) 按key查:
dict[key]
i. Key存在会返回结果
ii. Key不存在会报错
b) 安全按key查询1:
dict.get(key)
即使key不存在也不会报错,会返回None
i. 如果key存在,返回key的value
ii. 如果key不存在,返回None
c) 安全按key查询2:
dict.get(key,任意数据)
即使key不存在也不会报错,会返回参数中设置的数据
i. 如果key存在,返回key的value
ii. 如果key不存在,返回get函数中设置的参数
d) keys()迭代查询
dict.keys()是字典的key的列表
dict1 = {'name':'kk','age':32}for each in dict1.keys():
print(each)
name
Age
dict1 = {'name':'kk','age':32}for each in dict1:
print(each)
name
Age
e) Values()迭代查询
dict.values() 是字典的value的列表
dict1 = {'name':'kk','age':32}for each in dict1.values():
print(each)
kk
32
f) items()迭代查询
dict.items() 是字典的键值对的元组组成的列表
dict1 = {'name':'kk','age':32}for each in dict1.items():
print(each)('name','kk')('age', 32)
分别打印key和value:
dict1 = {'name':'kk','age':'32'}for k,v in dict1.items():
print(k+':'+v)
name:kk
age:32
a) 修改嵌套的列表:
dict1={‘name’:[1,2,3,4,’abc’]}#修改嵌套的列表加一个元素5
dict1[‘name’].append(5)#把列表中的abc变成全大写
dict1[‘name’][4]=dict1[‘name’][4].upper()
b) 修改嵌套的字典:
dict1={'name':{'age':1,'wo':'andy'}}#把嵌套的字典中新加一个键值对“xioali”:”dali”
dict1['name'].setdefault('xioali','dali')