一、字典(dict)
-
格式
以{}表示,每一项用逗号隔开,内部元素用key:value的形式来保存数据:
dic{"key":"value","key2":"value2"}
key:必须是可哈希的(不可变的),并且是唯一的
value:任意值
字典是无序的(3.6默认了定义顺序),可变的(可增删改查)
-
作用
2.1 用于存储大量数据,比列表还要大的,但比较消耗内存
2.2 字典能够将数据与数据进行关联,有明确对应关系时推荐使用字典
2.3 通过key来查找元素,查询效率高
2.4 hash算法:key必须时不可变的数据类型
-
字典的使用方法
方法 作用 1.增 dic["key"] = "value" 直接用key往里面存数据即可,如果key存在会替换掉原来的value,可用于修改。 dic.setdefault("key","value") 首先查看要添加的键存不存在,如果不存在,就执行新增;如果存在key,不会执行新增 2.删 dic.pop("key") 通过键删除,有返回值,返回的时被删除的值 del dic["key"] 删除指定键值对 dic.clear() 清空 3.改 dic["key"] = "value" 如果键在字典中存在就修改,不存在就添加 dic.update(dic2) 将dic2按key添加到dic中,若dic中key存在则替换成dic2中的value,如果key 不存在则直接添加到dic。括号里的字典级别高 4.查 dic["key"] 通过键获取值,不能通过值获取键,如果存在key就返回对应的值,如果不存在就报错 dic.get("key","可制定返回值") 获取,获取值的时候可以指定返回的内容,键不存在的时候不报错 dic.setdefault("key","value") 首先新增(先看有没有key,如果有就过,如果没有,执行新增),然后根据key把值返回 -
相关操作
4.1 解构
a = 1 b = 2 a,b = b,a 结果: a=2,b=1
a,_,c = "你好啊" #字符串解构 print(a,c) 结果: 你 啊
a,b = ("1","2") #元组解构 print(a,b) 结果: 1 2
a,b = ["4","5"] #列表解构 print(a,b) 结果: 4 5
a,b = {"a":1,"b":2,} #字典解构 print(a,b) 结果: a b
4.2 dic.keys() 拿到字典的key
dic.values() 拿到字典的value
dic = {"汪峰": "大陆音乐半壁江山", "周杰伦": "亚洲音乐天王", "罗志祥": "亚洲舞王"}#对字典的遍历 print(dic.keys()) # dict_keys(['汪峰', '周杰伦', '罗志祥']) 像列表但不是列表,可以for循环但不能索引 for key in dic.keys(): print(key) # 拿到key print(dic[key]) # 拿到value
4.3 dic.items() 拿到key和value,每一项为一个元组
dic = {"1":1,"2":2,"3":3,"4":4} print(dic.items()) 结果: dict_items([('1', 1), ('2', 2), ('3', 3), ('4', 4)])
dic = {"1":1,"2":2,"3":3,"4":4} for item in dic.items(): # 当需要遍历字典. 在操作中涉及到key和value的时候. print(item) # 元组 print(item[0],item[1]) 结果: ('1', 1) 1 1 ('2', 2) 2 2 ('3', 3) 3 3 ('4', 4) 4 4
通过key和value解构可写成:
dic = {"1":1,"2":2,"3":3,"4":4} for k, v in dic.items(): #拿到元组类型的键值对,然后进行解构 print(k,v) 结果: 1 1 2 2 3 3 4 4 dic = {"1":1,"2":2,"3":3,"4":4} for i in dic: # 效率高 print(i,dic[i])
4.5 效率问题
import time dic = {"1":1,"2":2,"3":3,"4":4} s = '3' s = time.time() if s in dic.keys(): #列表 -- [1,2,3,4,5] 中查找s 效率高 pass print(time.time() - s) s1 = time.time() for i in dic: if s == i: pass print(time.time() - s1)
4.6 enumerate() 枚举
dic = {"电脑":15000,"手机":8000,"耳机":4000,"老婆":1111} count = 1 for i in dic: print(count,i) count += 1 #直接使用enumerate() for i,k in enumerate(dic,1): # 其中第二个参数默认不写就是0 -- 枚举 print(i,k) 结果: 1 电脑 2 手机 3 耳机 4 老婆
-
字典的嵌套
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) 结果: {'name': '汪峰', 'age': 48, '成名曲': '春天里', 'wife': {'name': '章子怡', 'age': 49, '工作': '演员'}, 'children': [{'num': '001', 'name': '汪一', 'hobby': '唱歌'}, {'num': '002', 'name': '汪二', 'hobby': '演戏'}]}