认识字典
成对的保存数据。 以key:value的形式保存
用{}表示,每一项内容都是key:value, 每项数据之间用逗号隔开
字典中的key是不能重复的。 存储是依靠着key来计算的
字典是使用hash算法计算key的哈希值. 使用哈希值来存储数据
哈希算法得到的是一个唯一的数字(可能是正数, 可能是负数, 很大或者很小)
哈希算法是无序的
字典中的key必须是可哈希的, 不可变的就是可哈希的
不可变: 字符串, 元组, int, bool
可变的: list, dict, set
字典的value随便。
增加:
d[key] = value
dic = {}
dic["孙悟空"] = "齐天大圣"
dic["吃鸡战场"] = "什么鬼"
print(dic)
结果:
{'孙悟空': '齐天大圣', '吃鸡战场': '什么鬼’}
dic["孙悟空"] = "弼马温" #如果key重复,新value覆盖原value
print(dic)
{'孙悟空': '弼马温', '吃鸡战场': '什么鬼’}
setdefault(key[, default])
1.如果key在字典里,返回它的值,2.如果不在,增加key和default的值,并返回default的值
3.如果default为空返回None
dic = {}
dic["孙悟空"] = "齐天大圣"
print(dic.setdefault("宫本武藏", "很牛B")) #key不存在,返回的值为"很牛B"
dic.setdefault("宫本武藏", "很牛B") #key不存在,增加key和default的值
print(dic)
dic.setdefault("宫本武藏", "我的宫本很菜") # 如果key存在了就不会再添加了
print(dic)
print(dic.setdefault("苍井空", )) #key不存在且default为空返回None
结果:
很牛B
{'孙悟空': '齐天大圣', '宫本武藏': '很牛B'}
{'孙悟空': '齐天大圣', '宫本武藏': '很牛B'}
None
删除:
pop(key[, default])
如果key是在字典里,删除它并返回它的值
key不在字典里,如果有default值则返回默认值,没有则
KeyError报错
dic = {"张无忌":'倚天屠龙记', "紫薇":"还珠格格", "王语嫣":"天龙八部", "刘能":"乡村爱情协奏曲"}
print(dic.pop("刘能")) # 指定某个key进行删除,不设定default值,返回key中value值
print(dic.pop("杨坤","删除")) #key不在字典中,返回default值
结果:
乡村爱情协奏曲
删除
popitem()
clear() ¶
clear() ¶
清空列表
del d[key]删除d字典中key
del dic["紫薇
”
]
修改:
dic = {"张无忌":'倚天屠龙记', "紫薇":"还珠格格", "王语嫣":"天龙八部", "刘能":"乡村爱情协奏曲"}
# dic['王语嫣'] = "天龙九部" # dic[已经存在的key] = 新value
# print(dic)
dic2 = {"张无忌": "魔教教主", "紫薇":"还珠格格第二部", "马大帅":"彪哥"}
dic.update(dic2) # 把dic2中的内容覆盖到dic中
print(dic)
查询:
dic = {"张无忌":'倚天屠龙记', "紫薇":"还珠格格", "王语嫣":"天龙八部", "刘能":"乡村爱情协奏曲"}
print(dic['小燕子']) # dic[key] 如果key不存在 KeyError: '小燕子'
print(dic.get("小燕子")) # 当key不存在的时候不会报错。 默认返回None
print(dic.get("紫薇","没有")) # 两个参数. 如果第一个参数不存在。 返回第二个参数作为默认值, 如果存在直接返回value
print("张无忌" in dic) #如果key在字典中则返回True,否则False
操作:
dic = {"意大利":"西西里的美丽传说", "意大利2":"天堂电影院", "美国":'美国往事', "美国电视剧":"越狱"}
print(dic.keys()) # 返回的内容像列表。但不是列表
结果:
dict_keys(['意大利', '意大利2', '美国', '美国电视剧’])
values()
返回一个新的列表内容是字典的所有value值(像列表但不是列表)
items()返回键值对。 (key, value)
dic = {"意大利":"西西里的美丽传说", "意大利2":"天堂电影院", "美国":'美国往事', "美国电视剧":"越狱"}
print(dic.items()) # 返回键值对。 (key, value)
# 遍历字典的最好的方案
for k, v in dic.items(): # item是元组 (key, value)
print(k, v) # 直接拿到key和value
结果
dict_items([('意大利', '西西里的美丽传说'), ('意大利2', '天堂电影院'), ('美国', '美国往事'), ('美国电视剧', '越狱')])
意大利 西西里的美丽传说
意大利2 天堂电影院
美国 美国往事
美国电视剧 越狱
字典的嵌套:
# 面向对象思想, 前端JSON 对象
wf = {
"name":"汪峰",
"age":42,
"hobby":"抢头条",
"代表作":["春天里","怒放的生命","北京 北京"],
"wife_now":{
'name':"章子怡",
"age":62,
"爱好":"打麻将"
},
"children": [{'id':1,"name":"汪涵"},{"id":2,"name":"汪才"}]
}
print(wf['wife_now']['爱好'])
# 汪峰的小儿子改名成 汪晓峰
wf['children'][1]['name'] = "汪晓峰"
print(wf)
扩展:
流程: 1. 先检测是否存在key,xxxx
2. 根据你给的key把value查询出来
setdefault() 新增
dic = {"jay":"周杰伦"}
ret = dic.setdefault("jay_jj","林俊杰")
print(dic, ret)
lst = [11,22,33,44,55,66,77,88,99]
转化到字典中。 key1:[大于66的数据], key2:[小于等于66]
dic = {"key1":[], "key2": []}
for el in lst:
if el > 66:
dic['key1'].append(el)
else:
dic["key2"].append(el)
print(dic)
lst = [11,22,33,44,55,66,77,88,99]
dic = {}
for el in lst:
if el > 66:
dic.setdefault("key1", []).append(el)
else:
dic.setdefault("key2", []).append(el)
print(dic)