字典

认识字典
       成对的保存数据。 以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()
清空列表
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
 
操作:
 
keys() 返回一个新的列表内容是字典的所有key值(像列表但不是列表)
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)

转载于:https://www.cnblogs.com/BALCKLIGHTNING/p/9837461.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值