1、字典介绍
1.1 结构: {key1: value1, key2: value2, ....} ,由很多键值对构成. 在字典的key-value(键值对)中, key(键)必须是可哈希(不可变)的, 而且是唯一的.
1.2 字典的存储机制: 在dict中key是惟一的. 在保存的时候, 根据key, 通过哈希算法计算出一个内存地址, 然后将key-value保存在这个地址中;
在查询时, 直接查到key的哈希值 ,然后找到内存地址,将里面的key-value提取出来.
1.3 可哈希(不可变)的数据类型: str, int, bool, 元组.
不可哈希(可变)的数据类型: 列表, 字典, 集合.
1.4 字典不能进行切片,只能通过key来提取出对应的value值.
2、字典增删改查
2.1 增
dic["key"] = "value"
dic.setdefault("key","value") ----> 若key存在,不修改value且返回对应的value; 若key不存在,则在字典后面添加新的键值对, 然后输出新的值value.
dic.setdefault("key") ----> 查找"key"对应的值, 有则输出value, 没有则输出None.
删
dic.pop("key") -----> 删除"key" 对应的键值对. 返回值为删除的key对应的value.
dic.popitem() ----> 删除最后一组键值对.返回值为删除的(key, value)元组形式.
del dic["key"] ----> 删除"key" 对应的键值对.
dic.clear() ----> 清空字典,变成{}
改
dic["key"] = "value"
dic1.update(dic2) ----> 把dic2字典里面的键值对添加到dic1里面去.
查
dic["key] ---->没有值则报错.
dic.get("key","value") ---->有key对应的值则返回value, 没有的话则返回新value(第二个参数).
dic.get("key") ----> 没有则返回None.
dic.setdefault("key") ----> 没有值返回None.
3、其他操作
dic.keys() ----> 输出所有的键.
dic.values() ----> 输出所有的值.
dic.items() ----> 以元组的形式输出所有的键值对("key","value")("key","value")......
如何遍历字典?
for k, v in dic.items():
print(k, v) -----> 输出key, value (最佳方式, 推荐使用)
for k in dic:
print(k) ----> 只输出key
列表转字典
key_lst = [1,2,3,4,5]
value_lst = ["a","b","c","d","e"]
方式一: dic = {key_lst[i]: value_lst[i] for i in range(len(key_lst)) }
方式二: dic = dict(zip(key_lst,value_lst))
key_lst = [1,2,3,4,5]
value_lst = ["a","b","c","d","e"] dic1 = {key_lst[i]: value_lst[i] for i in range(len(key_lst)) } # 方式一
dic2 = dict(zip(key_lst,value_lst)) # 方式二
print(dic1)
print(dic2)
列表转字典
字典的切割
dic = {1:"A",2:"B",3:"C",4:"D",5:"E",6:"F",7:"G"}
index = [1,2,4,7]
dic_new = dict[ [k,dic[k] ] for k in index ] ----> {1: 'A', 2: 'B', 4: 'D', 7: 'G'}
dic = {1:"A",2:"B",3:"C",4:"D",5:"E",6:"F",7:"G"}
index = [1,2,4,7]
dic_new = dict([k,dic[k]] for k in index)
print(dic_new)
字典伪切割
4、字典的嵌套
找到子字典(value)对应的key名, 层层剖析.