字典(dict)是python中惟⼀的⼀个映射类型.他是以{ }括起来的键值对组成. 在dict中key是 惟⼀的. 在保存的时候, 根据key来计算出⼀个内存地址. 而后将key-value保存在这个地址中. 这种算法被称为hash算法, 因此, 切记, 在dict中存储的key-value中的key'必须是可 的, 若是你搞不懂什么是可哈希, 暂时能够这样记, 能够改变的都是不可哈希的, 那么可哈希就意味着不可变. 这个是为了能准确的计算内存地址⽽规定的.python
字典的特性 :git
dic = {} dic['name'] = '周润发' # 若是dict中没有出现这个key, 就会新增⼀个key-value的组合进dict dic['age'] = 18 print(dic) # 若是dict中没有出现过这个key-value. 能够经过setdefault设置默认值 dic.setdefault('李嘉诚') # 也能够往⾥⾯设置值. print(dit) # 打印出来是 {'李嘉诚':None} dic.setdefault("李嘉诚", "房地产") # 若是dict中已经存在了. 那么setdefault将不会起做⽤ print(dic) #这时出现的是依旧是 {'李嘉诚':None}
第一种 :利用key去修改: dic = {"刘能": "王小利", "赵四": "刘晓光", "王木生": "范伟", "谢大脚": "于月仙"} dic['王木生'] = "刘伟" print(dic) # 结果: {"刘能": "王小利", "赵四": "刘晓光", "王木生": "刘伟", "谢大脚": "于月仙"} 第二种 : update 更新 dic = {"刘能": "王小利", "赵四": "刘晓光", "王木生": "范伟", "谢大脚": "于月仙"} dic2 = {"刘能": "大阳哥", "赵四": "github", "王木生": "汪峰","王大拿": "金老板"} dic.update(dic2) print(dic) #结果 :{"刘能": "大阳哥", "赵四": "github", "王木生": "汪峰", "谢大脚": "于月仙","王大拿": "金老板"} # 旧的覆盖,没改的不动,新加的补到最后
若是key("sylar")不存在 第一个 print(dic.get("sylar")) # None 系统默认会显示None print(dic.get("sylar", "⽜B")) # ⽜B 若是key不存在,第二个逗号会显示出 "⽜B"
dic = {} dic["盖伦"] = "德玛西亚之力" value = dic.setdefault("菲奥娜", "无双剑姬") # 新增 value2 = dic.setdefault("盖伦", "刘伟") # 因为已经存在了key。 因此新增不执行。 直接查询结果 value3 = dic.setdefault("薇恩", "坑") print(value3) 结果 : "坑" print(dic) 结果 : {"盖伦":"德玛西亚之力","菲奥娜":"无双剑姬","薇恩": "坑"}
# 对字典的遍历 : dic = {"汪峰": "大陆音乐半壁江山", "周杰伦": "亚洲音乐天王", "罗志祥": "亚洲舞王"} 第一种: # print(dic.keys()) # dict_keys(['汪峰', '周杰伦', '罗志祥']) 像列表但不是列表 for key in dic.keys(): print(key) # 拿到key print(dic[key]) # 拿到value
第二种(最简化): # print(dic.items()) # 拿到的是key和value for k, v in dic.items(): # 当须要遍历字典. 在操做中涉及到key和value的时候. print(k) # 元组的keys print(v) # 元组的与keys对应的values
第三种(经常使用): 字典自己是一个可迭代对象,能够直接进行for循环 for el in dic: # 直接拿到key print(el) # keys print(dic[el]) # values
打印元组: for item in dic.items(): print(item) # 打印出的结果是 dic里每个(key:value)
dic = {1:11,2:22,3:33,4:44,5:55,6:66,7:77,8:88,} for i in enumerate(dic,1): # 也能够是dic.values / items print(i) # 打印结果 (默认显示的是keys) (1, 1) (2, 2) (3, 3) (4, 4) (5, 5) (6, 6) (7, 7) (8, 8)
解包和枚举 s = "wtf" d = {} for i, d[i] in enumerate(s): pass print(d)# 打印结果: {0:"w",1:"t",2:"f"}
# 解构 a, b = 1, 2 print(a, b) (c, d) = 3, 4 print(c, d) e, f = [1, 2, 3] # 解构的时候注意数量必须匹配 print(e, f)
与list类似,索引换成keygithub
# 字典的嵌套 dic1 = { "name": "汪峰", "age": 18, "wife": { "name": '章⼦怡', "age": 28 }, "children": ['第⼀个⽑孩⼦', '第⼆个⽑孩⼦'], "desc": '峰哥不会告我吧. 不要紧. 我想上头条的' } print(dic1.get("wife").get("name"))