字典的基础知识
一 字典的 简单介绍
字典(dic) 是 python中 唯一的一个映射类型,他是以 {} 括起来的键值对组成,在 dic 中 key 是唯一的,
在保存的时候,根据 key 来计算出一个内存地址,然后将 key-value 保存再这个地址中,这种算法被称为
hash 算法,所以,切记,切记,切记,在 dic 中 存储的 key-value 中的 key 必须是可 hash 的,
可 hash 的 就是不是不可 改变的
已知的 可 哈希(不可变) 的 数据类型: int str tuple bool
不 可 哈希(可变) 的数据类型: list set
语法:
{key1:value1,key2:value2....}
注意: key 必须是不可变(可哈希)的,value没有要求,可以保存任意类型的数据
合法 dic = {1:4,True:99,"id":11,"name":"哈哈哥","stu":["水哥","哈哈哥"],(1,2,3):"麻花藤"} print(dic[1]) print(dic[True]) print(dic["id"]) print(dic[(1,2,3)]) 不合法 dic = {[1,2,3]:"周杰伦"} dic = {{1:2}:"哈哈"} dic = {{1,2,3}:"呵呵"}
dic 保存的数据不是按照我们添加进去的顺序保存的 ,是按照 hash 表的顺序保存的, 而 hash 表 不是连续的,
所以不能进行切片 工作,它只能通过 key 来获取dic 中的数据
二 字典的增删改查 和 其他操作
1.增加
## dic[key] = 值 如果dic 中 没有出现这个 key,就会新增一个 key-value的组合 进 dic dic = {} dic["name"] = "哈哈哥" dic["age"] = 18 print(dic) #{'name': '哈哈哥', 'age': 18} # 如果 dic 中没有 出现这个 key-value,可通过 setdefault 设置默认值 dic.setdefault("李嘉诚","房地产") # 如果dic 中已经存在,那么 setdefault 将不会起作用 print(dic)
2.删除
# dic = {"周星驰":"喜剧之王","李建杰":"功夫之王","刘德华":"帅气"} # ret = dic.pop("周星驰") # print(ret) # print(dic) ## pop 有返回值,如果 删除的 key 在 dic 中,则返回 key 对应的 value ## 如果删除的 key 不存在 会报错, ### dic.pop("哈哈哥","不存在") 可以加一个参数进去,返回值就是这个参数 # dic = {"周星驰":"喜剧之王","李建杰":"功夫之王","刘德华":"帅气"} # del dic["周星驰"] # print(dic) dic = {"周星驰":"喜剧之王","李建杰":"功夫之王","刘德华":"帅气"} ret = dic.popitem() print(dic) ### python 以前的版本 ,随机删除,现在3.6以上版本,删除最后一项
print(dic.popitem())
# 返回的是 ('刘德华', '帅气') dic.clear() ## 全部清空
3.改
dic = {"k1":"喜剧之王","李建杰":"功夫之王","刘德华":"帅气"} dic1 = {"k1":"张敏","k2":"张曼玉","k3":"朱茵","k4":"邱淑贞"} dic.update(dic1) ## 把 dic1 中的 内容 更新到 dic 中,如果 key 重名,则修改替换,如果不存在 key, 则 新增 print(dic1) print(dic)
4.查
查询一般用 key 来查询具体的数据
dic = {"k1":"张敏","k2":"张曼玉","k3":"朱茵","k4":"邱淑贞"} print(dic["k1"]) # 张敏 print(dic.get("k2")) ## 张曼玉 print(dic.get("哈哈哥")) ## 不存在 返回 None 推荐 使用 print(dic.get("哈哈哥","牛B")) ## 返回 牛B
5.其他相关操作
dic = {"id":123,"name":"哈哈哥","age":18,"ok":"乔丹"} # print(dic.keys()) # dict_keys(['id', 'name', 'age', 'ok']) 高仿列表 当成列表用 # for key in dic.keys(): # print(key) # <class str> 得到所有的 key 字符串形式的 ## print(dic.values()) ## dict_values([123, '哈哈哥', 18, '乔丹']) 高仿列表 当成列表用 # for value in dic.values(): # print(value) ## 得到所有的 value 值 ## print(dic.items()) # #dict_items([('id', 123), ('name', '哈哈哥'), ('age', 18), ('ok', '乔丹')]) #### 也是个 列表,只是 列表中 装的是 元祖 for k,v in dic.items(): print(k,v) ## 结构 a,b = 1,2 print(a,b) ## 1 2 (c,d) = 3,4 print(c,d) ## 3 4 e,f = [1,2,3] print(e,f) ## 报错 ,结构的时候 注意 数量必须匹配