day05

1. 字典(dict)的简单介绍

字典(dict)是python中唯⼀的⼀个映射类型.他是以{ }括起来的键值对组成. 在dict中key是唯⼀的. 
语法 :
    {key1: value1, key2: value2....}
# 用大括号{}括起来. 内部使用key:value的形式来保存数据
    {'jay':'周杰伦','jj':'林俊杰'}
注意: key必须是不可变(可哈希)的. value没有要求.可以保存任意类型的数据

已知的可哈希(不可变)的数据类型: int, str, tuple, bool
不可哈希(可变)的数据类型: list, dict, set

2. 字典(dict)的增删改查

*增加
dic = {'昆凌':"周杰伦的老婆"}

# 新增
dic["国际章"] = "汪峰的老婆"    
print(dic)  # {'昆凌': '周杰伦的老婆', '国际章': '汪峰的老婆'}

# 若果key重复了, 会替换掉原来的数据
dic["国际章"] = "雄壮的老外"    
print(dic)  # {'昆凌': '周杰伦的老婆', '国际章': '雄壮的老外'}

# 新增
dic.setdefault("马蓉","王宝强的前任老婆")
print(dic)  # {'昆凌': '周杰伦的老婆', '马蓉': '王宝强的前任老婆'}

# 如果字典中已经包含了这个key,不在继续保存.
dic.setdefault("马蓉","宋哲的现任老婆????") 
print(dic)  # {'昆凌': '周杰伦的老婆', '马蓉': '王宝强的前任老婆'}

#只有key,没有value.  那么value是空值none
dic.setdefault("谢娜",)   
print(dic)  # {'昆凌': '周杰伦的老婆', '马蓉': '王宝强的前任老婆', '谢娜': None}
* 删除
dic = {"牌牌":"你去哪里了","晓雪":"你快回来","雪雪":"又走了","老李":"你怎么来了?"}

# 删除
ret = dic.pop("晓雪")  # 返回被删除这个元素的value值     
print(dic)  # {"牌牌":"你去哪里了","雪雪":"又走了","老李":"你怎么来了?"}
print(ret)  # 你快回来

# 随机删
ret = dic.popitem()   # 返回被随机删除这个元素的value值
print(dic)
print(ret)

# del删除
del dic["雪雪"]     
print(dic)  # {'牌牌': '你去哪里了', '晓雪': '你快回来', '老李': '你怎么来了?'}

# 清空字典所有内容
dic.clear() 
print(dic)  # {}
*修改
dic = {"id":1,"name":"李嘉诚",'money':1000000}
# 李嘉诚赔 了500
dic["money"] = dic["money"] - 500
print(dic)  # {'id': 1, 'name': '李嘉诚', 'money': 999500}
dic1 = {'李晨':'范冰冰',"邓超":"孙俪","王祖蓝":"李亚男"} dic2 = {'李晨':'张曦予',"郑凯":"baby","王宝强":"马蓉"} dic1.update(dic2) # 把dic2中的内容更新到dic1中. 如果存在了key,替换. 如果不存在,添加. print(dic1) # {'李晨': '张曦予', '邓超': '孙俪', '王祖蓝': '李亚男', '郑凯': 'baby', '王宝强': '马蓉'} print(dic2) # {'李晨': '张曦予', '郑凯': 'baby', '王宝强': '马蓉'}
*查询
dic = {"及时雨":"宋江","小李广":"花荣","黑旋风":"李逵","易大师":"剑圣"}
dic["大宝剑"] = "盖伦"   # 新增(dic里面没有)
dic["及时雨"] = "天老爷"  # 修改(覆盖)

# 查询. 如果key存在,得到他的value值. 如果key不在,报错
print(dic["及时雨"])  # 天老爷
print(dic["易大师是个脑残"])   # KeyError: '易大师是个脑残'

# get()
# 可以通过key来获取value的值. 那么如果key不存在. 返回None
# 野人可以在后面给出一个默认值. 当key不存在是返回默认值
dic = {"及时雨":"宋江","小李广":"花荣","黑旋风":"李逵","易大师":"剑圣"}
print(dic.get("易大师","余小c"))   # 剑圣
print(dic.get("无用")) # None
print(dic.get("无用","不存在")) # 不存在

dic = {"及时雨":"宋江","易大师":"剑圣"}
dic.setdefault("诺手","诺克萨斯")   # 可以帮我们添加(如果dic中有了,不再覆盖添加)
print(dic)  # {'及时雨': '宋江', '易大师': '剑圣', '诺手': '诺克萨斯'}
ret = dic.setdefault("及时雨123","hello")
print(ret)  # hello
print(dic)  # {'及时雨': '宋江', '易大师': '剑圣', '诺手': '诺克萨斯', '及时雨123': 'hello'}

# 1. 首先判断原来的字典有没有这个key. 如果没有,执行新增.
# 2. 用这个key去字典中查询, 返回查询到的结果
dic = {"及时雨":"宋江","易大师":"剑圣"}
ret = dic.setdefault("潘金莲","西门庆")   # 如果没有,就新增. 再通过key去查询value.
print(ret)  # 西门庆

ret = dic.setdefault("及时雨","西门庆")   # 如果有,就不用新增. 直接通过key去查询.
print(dic)  # {'及时雨': '宋江', '易大师': '剑圣', '潘金莲': '西门庆'}
print(ret)  # 宋江

3. 字典的其他相关操作

dic = {"及时雨":"宋江","易大师":"剑圣","维恩":"暗影猎手"}

# 拿到所有的key. 返回key的集合. 像是列表, 但不是列表
print(dic.keys())  # dict_keys(['及时雨', '易大师', '维恩'])
for key in dic.keys():  # 可以进行迭代循环
    print(key)

# 拿到所有的value. 返回key的集合. 像是列表, 但不是列表
print(dic.values())  # dict_values(['宋江', '剑圣', '暗影猎手'])
for value in dic.values():
    print(value)

# 拿到所有的赋值对
print(dic.items())  # dict_items([('及时雨', '宋江'), ('易大师', '剑圣'), ('维恩', '暗影猎手')])
# 遍历dict
for k, v in dic.items():  # 下面的两步利用解构最终推出这个
    print(k, v)

for item in dic.items():
    print(item[0])  # key
    print(item[1])  # value

for item in dic.items():
    k, v = item # (key, value)
    print(k)
    print(v)

# 解构. 解包(元组, 列表都可以用)
a, b = (1, 2)
print(a)  # 1
print(b)  # 2

a, b, c, = ("马化腾","马云","马良")
print(a)  # 马化腾
print(b)  # 马云
print(c)  # 马良

a, b = [1,2]
print(a,b)  # 1 2

k, v = "st"
print(k, v)  # s t

# len()测量字典的长度
s = {"ni":"","wo":"","ta":""}
print(len(s))  # 3
# 直接循环字典,拿到的是key
dic = {1:'a',2:'b',3:'c'}
for a in dic:   
    print(a)
    print(dic[a])

4. 字典的嵌套

dic = {
    "name":"汪峰",
    "age":58,
    "wife":{
        "name":"国际章",
        "salary": 180000,
        "age": 37
        },
    "children":[
        {"name":"老大","age": 18},
        {"name":"老二","age": 118}
    ]
}
print(dic["children"][1]["age"])  # 118
print(dic["wife"]["salary"])  # 180000

  

原文地址:https://www.cnblogs.com/kangqi452/p/11280999.html