万恶之源 - 基本数据类型之字典(dict)
一. 字典的简单介绍
字典(dict)是python中唯一的一个映射类型.他是以{ }括起来的键值对组成. 在dict中key是
唯一的. 在保存的时候, 根据key来计算出一个内存地址. 然后将key-value保存在这个地址中.
这种算法被称为hash算法, 所以, 切记, 在dict中存储的key-value中的key'必须是可hash的,
如果你搞不懂什什么是可哈希, 暂时可以这样记, 可以改变的都是不可哈希的,
那么可哈希就意味着不可变. 这个是为了了能准确的计算内存地址而规定的.
已知的可哈希(不可变)的数据类型: int, str, tuple, bool
不可哈希(可变)的数据类型: list, dict, set
语法 :
{key1: value1, key2: value2....}
key必须是不可变(可哈希)的. value没有要求.可以保存任意类型的数据
dict保存的数据不是按照我们添加进去的顺序保存的. 是按照hash表的顺序保存的. 而hash表
不是连续的. 所以不能进行切片工作. 它只能通过key来获取dict中的数据
1. 增加
dic['name'] = '周润发' # 如果dict中没有出现这个key, 就会新增一个key-value的组合进dict,如果存在,则之前的会被覆盖
dic.setdefault("李嘉诚", "房地产") # 如果dict中已经存在了. 那么setdefault将不会起作用
2. 删除
dic.pop("jay") #删除'jay'
del dic["jay"]
ret = dic.popitem() #随机删除
dic.clear() #清空字典
dict中的元素在迭代过程中是不允许进行删除的,
把要删除的元素暂时先保存在一个list中, 然后循环list, 再删除
3. 修改
dic.update(dic1) # 把dic1中的内容更新到dic中. 如果key重名. 则修改替换. 如果不存在key, 则新增.
4. 查询
查询一般用key来查找具体的数据.
print(dic['name'])
# print(dic['sylar']) # 报错
print(dic.get("ok"))
print(dic.get("sylar")) # None
print(dic.get("sylar", "牛B")) # 牛B
dic.keys() # 将所有的key值查出来
dic.values() # 将所有的value 查出来
dic.items() #将字典以列表的形式展示出来
for key, value in dic.items(): # ?? 这个是解构
print(key, value)
e, f = [1, 2, 3] # 解构的时候注意数量量必须匹配
字典的嵌套
同样采用降维操作.一层一层的看就好.
循环len(li)次, 然后从后往前删除
或者. 用另一个列表来记录你要删除的内容. 然后循环删除
注意: 由于删除元素会导致元素的索引改变, 所以容易出现问题. 尽量不要再循环中直接去删除元素.
可以把要删除的元素添加到另一个集合中然后再批量删除.
dict中的fromkey(),可以帮我们通过list来创建一个dict
dic = dict.fromkeys(["jay", "JJ"], ["周杰伦", "麻花藤"])
print(dic)
结果:
{'jay': ['周杰伦', '麻花藤'], 'JJ': ['周杰伦', '麻花藤']}
前面列列表中的每一项都会作为key, 后面列列表中的内容作为value. 生成dict