一、认识字典
字典是成对的保存数据,以key:value的形式保存,用{}表示,每一项内容都是key:value,每项数据之间用逗号隔开
字典中的key是不能重复的。存储是依靠着key来计算的。
切记:在字典中存储的key-value中的key必须是可hash的,如果你搞不懂什么是哈希,暂时可以这样记,可以改变的都是不可哈希的,那么可哈希就意味着不可变,这个是为了能准确的计算内存地址而规定的。
已知的可哈希(不可变)的数据类型:str、int、tuple、bool
不可哈希(可变)的数据类型:list、dict、set
二、字典的增删改查
1、增加
dic[key] = value
setdefault(key, value)
dic = {}
dic['name'] = '周润发' # 如果dict中没有出现这个key, 就会新增⼀个key-value的组合进dict
dic['age'] = 18
print(dic)
结果:
{'name': '周润发', 'age': 18}
# 如果dict中没有出现过这个key-value. 可以通过setdefault设置默认值
dic.setdefault('李嘉诚') # 也可以往⾥⾯设置值.
dic.setdefault("李嘉诚", "房地产") # 如果dict中已经存在了. 那么setdefault将不会起作⽤,这个要记得
print(dic)
结果:
{'name': '周润发', 'age': 18, '李嘉诚': None}
字典增加操作
2、删除
dic = {"黄日华": "天龙八部", "吕颂贤": "笑傲江湖", "苏有朋": "倚天屠龙记", "六小龄童": "西游记"}
# dic.pop("吕颂贤") # 指定key删除
# dic.popitem() # 随机删除
# del dic["黄日华"] # 删除
# dic.clear() # 清空字典
print(dic)
3、修改
dic[key] = value
dic1.update(dict2)
dic = {"刘能": "王小利", "赵四": "刘晓光", "王木生": "范伟", "谢大脚": "于月仙", "李大国": "小鬼"}
dic['王木生'] = "刘伟"
结果:
{'刘能': '王小利', '赵四': '刘晓光', '王木生': '刘伟', '谢大脚': '于月仙', '李大国': '小鬼'}
dic2 = {"刘能": "大阳哥", "赵四": "github", "王木生": "汪峰", "谢大脚": "冯提莫", "王大拿": "金老板"}
dic.update(dic2)
print(dic)
把dict2 更新到dic
结果:
{'刘能': '大阳哥', '赵四': 'github', '王木生': '汪峰', '谢大脚': '冯提莫', '李大国': '小鬼', '王大拿': '金老板'}
1 dic = {"id": 123, "name": 'sylar', "age": 18}
2 dic1 = {"id": 456, "name": "麻花藤", "ok": "wtf"}
3 dic.update(dic1) # 把dic1中的内容更新到dic中. 如果key重名. 则修改替换. 如果不存在key, 则新增.
4 print(dic)
5 print(dic1)
4、查询
dic[key] 可能会报错
dic.get(key)
dic.setdefault()
dic = {'刘能': '大阳哥', '赵四': 'github', '王木生': '汪峰', '谢大脚': '冯提莫', '李大国': '小鬼', '王大拿': '金老板'}
# 1. 最直观。 直接用key
print(dic['周杰伦']) # 当这个key不存在的时候会报错
# 2. get方法
print(dic.get("谢大脚", "周杰伦不在这里")) # 没有key. 返回None
# 3. setdefault() 1. 新增(先看有没有key, 如果有就过, 如果没有,执行新增) 2.根据key把值返回
dic = {}
dic["盖伦"] = "德玛西亚之力"
value = dic.setdefault("菲奥娜", "无双剑姬") # 新增
value2 = dic.setdefault("盖伦", "刘伟") # 由于已经存在了key。 所以新增不执行。 直接查询结果
value3 = dic.setdefault("薇恩", "坑")
print(value3)
print(dic)
重要******
三、常见操作
keys() key的集合
values() value的集合
items() 键值对的集合(key,value)
dic = {"汪峰": "大陆音乐半壁江山", "周杰伦": "亚洲音乐天王", "罗志祥": "亚洲舞王"}
对字典的遍历
print(dic.keys()) # dict_keys(['汪峰', '周杰伦', '罗志祥']) 像列表但不是列表
for key in dic.keys():
print(key) # 拿到key
print(dic[key]) # 拿到value
print(dic.values())
for value in dic.values():
print(value)
也可以遍历字典*****************************************************************
[('汪峰', '大陆音乐半壁江山'), ('周杰伦', '亚洲音乐天王'), ('罗志祥', '亚洲舞王')]
print(dic.items()) # 拿到的是key和value
for k, v in dic.items(): # 当需要遍历字典. 在操作中涉及到key和value的时候.
print(k) # 元组
print(v)
字典本身是一个可迭代对象,可以直接进行for循环*********************************
for el in dic: # 直接拿到key
print(el)
print(dic[el])
前面的变量的个数和后面解包的个数一致
a, b = (10, 20) # 解构, 解包
print(a)
print(b)
四、字符串嵌套
# 字典的嵌套
dic1 = {
"name": "汪峰",
"age": 18,
"wife": {
"name": '章⼦怡',
"age": 28
},
"children": ['第⼀个⽑孩⼦', '第⼆个⽑孩⼦'],
"desc": '峰哥不会告我吧. 没关系. 我想上头条的'
}
print(dic1.get("wife").get("name"))
print(dic1.get("children"))
print(dic1.get("children")[1])