python.day05

一 字典 

定义:dict, 以{},表示.每一项用逗号隔开,内部元素用key:value的形式来保存数据.例如

{"jj":"林俊杰","jay':周杰伦"}

特点:查询效率非常高,通过key来查找元素

内部使用key来计算一个内存地址(暂时),hash算法,key必须不可变的数据类型(key必须是可hash的数据类型)可hash就是不可变

已知的可hash数据:int str tuple bool

不可hash的类型:list dist set

语法 dict={key1:value1,key2;value2....}

注意;key必须是不可hash的(不可变的),value没有要求(可以保存任意的数据)

       dict保存的数据不是按照我们添加进去的顺序保存的. 是按照hash表的顺序保存的. ⽽而hash表
       不是连续的. 所以不能进⾏行行切片⼯工作. 它只能通过key来获取dict中的数据

二 新增

dic={}
dic["徐峥"]="人在囧途" #如果dict中没没有key,就会新增一个key:value的组合进去
dic["黄渤"]="疯狂的石头"
dic["王宝强"]="天下无贼"
dic["王宝强"]="士兵突击" #如果key已经存在.那么会替换掉原来的value
dic.setdefault("黄丘生")
dic.setdefault("黄丘生","无间道")# 如果key存在了 不会执行新增
print(dic)

三 删除

dic = {"黄日华": "天龙八部", "吕颂贤": "笑傲江湖", "苏有朋": "倚天屠记"}
# #dic.pop("吕颂贤") #指定删除
# dic.popitem()#随即删除
# dic.clear() # 清空字典
# print(dic)

四 修改

dic = {"刘能": "王小利", "赵四": "刘晓光", "王木生": "范伟", "谢大脚": "于月仙", "李大国": "小鬼"}
dic['王木生'] = "刘伟"
# print(dic) 替换
dic2 = {"刘能": "大阳哥", "赵四": "github", "王木生": "汪峰", "谢大脚": "冯提莫", "王大拿": "金老板"}
dic.update(dic2) #相同的换掉,不一样的加上去
print(dic)

五 查询

 dic={"刘能":"大阳哥","赵四":"github","王木生":"汪峰"}
# #1.最直观,直接用key
# print(dic["刘能"])#当这个key不存在时会报错
# # # 2.get
# print(dic.get("谢大脚",))##没有key返回none
# # #3.
# #setdefault(先新增 看看有没有key,如果有就过,没有执行新增 @根据key把值返回
dic={}
dic["盖伦"]="德玛西亚之力"
value = dic.setdefault("feiaona", "无双剑姬")  # 新增
value2 = dic.setdefault("盖伦", "刘伟")  # 由于已经存在了key。 所以新增不执行。 直接查询结果
value3 = dic.setdefault("薇恩", "")
print(dic)

相关操作

主要是遍历字典

=相关操作
dic = {"汪峰": "大陆音乐半壁江山", "周杰伦": "亚洲音乐天王", "罗志祥": "亚洲舞王"}
#print(dic.values()) #得到 dict_keys(['汪峰', '周杰伦', '罗志祥']) 像列表但不是列表 可以当列表来看(来用)

#通过这种方法对字典的遍历一个个都拿出来
#第一种方法:
# for key in dic.keys():
#     print(key) # 得到 key
#     print(dic[key]) #得到value     daic[key]表示value

#上边是对key的遍历
#对value的遍历

# print(dic.values())
# for value in dic.values():
#    print(value)# 只能拿出value不能拿出key 也就这样了

#既然拿到key,拿到value
#能不能一对一对拿

#亦可以遍历字典
# print(dic.items())  #items每一项 ; 拿到value和拿出key
# for item in dic.items():
#     print(item) #拿到元组类型的
#     print(item[0],item[1]) #拿到key和value
#
# a,b=10,20 #结构解包 元组列表都有
# print(a)
# print(b)

#这个也可以遍历字典
#
# 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])

六 字典的嵌套

给个例子

wf = {
    "name": "汪峰",
    "age": 48,
    "成名曲": "春天里",
    "wife": {
        "name": "章子怡",
        "age": 39,
        "工作": "演员"
    },
    "children":[
        {"num": "001", "name": "汪一", "hobby": "唱歌"},
        {"num": "002", "name": "汪二", "hobby": "演戏"} # wf['children'][1]['name']
    ]
}

# wf['wife']['age'] = wf['wife']['age'] + 10
# print(wf)
原文地址:https://www.cnblogs.com/systemsystem/p/9606067.html