>大纲
- dict的介绍
- dict的语法
- dict的增删改查
- dict的操作功能
- dict的for循环
- dict的嵌套
- 解包,解构
1.dict(字典)简介
# 字典(dict)是python中唯一的一个映射类型.他是以{ }括起来的键值对组成. 在dict中key是
# 唯⼀的. 在保存的时候, 根据key来计算出一个内存地址. 然后将key-value保存在这个地址中.
# 这种算法被称为hash算法, 所以, 切记, 在dict中存储的key-value中的key'必须是可hash的,
# 如果你搞不懂什什么是可哈希, 暂时可以这样记, 可以改变的都是不可哈希的,
# 已知的可哈希(不可变)的数据类型: int, str, tuple, bool(True,False)
# 不可哈希(可变)的数据类型: list, dict, set
# 那么可哈希就意味着不可变. 这个是为了能准确的计算内存地址⽽规定的.
# 对于dict中value可以是所有,str,常量,list,int,tuple等.
# ====================
2.字典的语法
# {key1: value1, key2: value2....}
# dic = {"章子怡":"汪峰的老婆"}
# print(dic)
# # {'章子怡': '汪峰的老婆'}
# ====================
3.增加
# # 方法一
# dic ["baby"] = "黄晓明的老婆" # print(dic) # # {'章子怡': '汪峰的老婆', 'baby': '黄晓明的老婆'}
# # 方法二
# # 方法二 # dic.setdefault("马蓉","王宝强的前妻") # print(dic) # # {'章子怡': '汪峰的老婆', 'baby': '黄晓明的老婆', '马蓉': '王宝强的前妻'}
# # 特殊情况一
# # 当添加的键已经存在字典中
# dic ["baby"] = "漂亮" # print(dic) # # {'章子怡': '汪峰的老婆', 'baby': '漂亮', '马蓉': '王宝强的前妻'} 当key已经存在时,会吧以前的value替 # # 换成新value
# # 特殊情况二
# dic.setdefault("马蓉","张集的情人") # print(dic) # # {'章子怡': '汪峰的老婆', 'baby': '漂亮', '马蓉': '王宝强的前妻'} 当key已经存在时,不会再添加.
# # 特殊情况三
# dic ["name"] = "" # print(dic) # # {'章子怡': '汪峰的老婆', 'baby': '漂亮', '马蓉': '王宝强的前妻', 'name': ''} 当value为空时,增加的也是# # 空 # # # dic.setdefault("age","") # print(dic) # # {'章子怡': '汪峰的老婆', 'baby': '漂亮', '马蓉': '王宝强的前妻', 'name': '', 'age': ''} 当value为空 # # 时,增加的也是空
4.删除
# 方法一
# name_dict = {"name":"王剑威","age":"22","add":"HeBei"} # name_dict.pop("add") # print(name_dict) # {'name': '王剑威', 'age': '22'} # ret = name_dict.pop("add") # print(ret) # HeBei pop删除的内容可以被变量接受,但是只会返回value.
# 方法二
# del name_dict["age"] # print(name_dict) # {'name': '王剑威', 'add': 'HeBei'}
# 方法三
# 随机删除 # name_dict.popitem() # print(name_dict) # {'name': '王剑威', 'age': '22'} # ret = name_dict.popitem() # print(ret) # ('add', 'HeBei') 返回的key和value,并添加到元祖中
5.修改
# 方法一
# name_dict = {"name":"王剑威","age":"22","add":"HeBei"} # name_dict["age"] = 30 # print(name_dict) # {'name': '王剑威', 'age': 30, 'add': 'HeBei'}
# 方法二 (此方法作为了解)
# dic1 = {"阿里巴巴":"马云","京东":"刘强东","腾讯":"马化腾"} # dic2 = {"华三":"于英涛","阿里巴巴":"王剑威","华为":"everyone"} # dic1.update(dic2) # print(dic1) # # {'阿里巴巴': '王剑威', '京东': '刘强东', '腾讯': '马化腾', '华三': '于英涛', '华为': 'everyone'} # print(dic2) # # {'华三': '于英涛', '阿里巴巴': '王剑威', '华为': 'everyone'} # # # 从以上可以看看出是将dic2更新到了dic1中,但是再两个字典中存在重复的key,结果是将dic2的相同key的# # # value更新到了dic1
6.查
# # 方法一
# dic1 = {"阿里巴巴":"马云","京东":"刘强东","腾讯":"马化腾"} # print(dic1.get("阿里巴巴")) # # 马云 # # # 当查找的key为空时,返回None # print(dic1.get("")) # # None
# # 方法二 setdefault除了可以添加还可以通过key查找value,但是需要变量接受,或者直接print
# # 方法二 setdefault除了可以添加还可以通过key查找value,但是需要变量接受,或者直接print # dic1 = {"阿里巴巴":"马云","京东":"刘强东","腾讯":"马化腾"} # print(dic1.setdefault("腾讯")) # # 马化腾
# setdefault功能完全讲解,除了增加,还能查找
# # 下面这个例子,可以看出setdefault有两步,一是添加,当添加的这个key在dict中不存在时,会添加这个键值# # # 对,如果key存在时不添加 # # 二然后根据添加的key去返回对应的value # dic1 = {"阿里巴巴":"马云","京东":"刘强东","腾讯":"马化腾"} # ret = dic1.setdefault("苏宁","ABC") # print(ret) # # ABC
7.dict的常见方法
# .keys() 返回字典中所有的key
# dic1 = {"阿里巴巴":"马云","京东":"刘强东","腾讯":"马化腾"} # print(dic1.keys()) # #dict_keys(['阿里巴巴', '京东', '腾讯']) 返回所有的key,但是输出到了一个类似列表的一个列表中,可以for循环
# .values() 返回字典中所有的value
# dic1 = {"阿里巴巴":"马云","京东":"刘强东","腾讯":"马化腾"} # print(dic1.values()) # # dict_values(['马云', '刘强东', '马化腾']) 返回所有的value,但是输出到了一个类似列表的一个列表中,可以for循环
# # .items() 返回所有的键值对
# dic1 = {"阿里巴巴":"马云","京东":"刘强东","腾讯":"马化腾"} # print(dic1.items()) # 返回所有的键值对 # # dict_items([('阿里巴巴', '马云'), ('京东', '刘强东'), ('腾讯', '马化腾')]) # # 将返回的所有的键值放进一个列表,每一个键值对又被放进列表中的一个元组中,同样可以使用for
8.字典的for循环
# 字典本身就是一个可迭代的数据类型,所以可以进行for循环
# dic1 = {"阿里巴巴":"马云","京东":"刘强东","腾讯":"马化腾"} # for n in dic1: # print(n) # 阿里巴巴 # 京东 # 腾讯 # 但是默认参加循环的时字典的key,所以会打印dic1的所有key
#那么如何将字典的value通过for循环遍历呢,方法有很多.....
# 方法一
# dic1 = {"阿里巴巴":"马云","京东":"刘强东","腾讯":"马化腾"} # for n in dic1.values(): #.values()取到的就是字典的每一个value,所以直接遍历的就是value # print(n) # 马云 # 刘强东 # 马化腾
# 方法二
# dic1 = {"阿里巴巴":"马云","京东":"刘强东","腾讯":"马化腾"} # for n in dic1: #这里循环的是字典本身,但是前面学过如何单个的取出key对应的value,那就是下面的代码 # print(dic1[n]) #用字典加上key,输出的就是value,方法很多... # print(dic1.get(n)) # print(dic1.setdefault(n)) # 马云 # 马云 # 马云 # 刘强东 # 刘强东 # 刘强东 # 马化腾 # 马化腾 # 马化腾
# ====================
9.字典的嵌套
# 现有如下字典
superstart = {"name":"汪峰", "age":44, "wife":{"name":"章子怡", "age":37, "gongzi":{"一月":90000, "二月":120000, "三月":110000, "四月":160000}}, "chair":[{"name":"老大", "age":8, "gender":"男"}, {"name":"老二", "age":10, "gender":"女"}]}
问题一:
# 现在要求输出汪峰的第二个孩子是男孩还是女孩.
# print(superstart.get("chair")[1]["gender"])
问题二:
# 输出汪峰老婆三月挣了多少钱?
# print(superstart["wife"]["gongzi"]["三月"])
10.今天新学一个解构, 记在这里
# 定义两个变量,两个值
# a = 1 # b = 2 # print(a,b) # 结果:1 2
# 解包之后
# a,b = (1,2) # print(a,b) # 结果:1 2