python--字典工厂函数dict()
1 dic = {"name" : "wangmo" ,"age" : 18} 2 3 #dic.clear() #清空字典 4 print(dic) 5 #{} 6 7 dic1=dic.copy() #复制字典 8 print(dic1) 9 #{'name': 'wangmo', 'age': 18} 10 11 dic1=dict.fromkeys("hello",1) #快速生成字典 12 print(dic1) 13 #{'o': 1, 'h': 1, 'l': 1, 'e': 1} 14 15 print(dic.get("name")) #查看字典中是否存在此key,没有提示none 16 #wangmo 17 18 print(dic["name"]) #查看字典中是否存在此key,没有会报错 19 #wangmo 20 21 print(dic.items()) #将每对key-value表示成列表中元组的形式 22 #dict_items([('name', 'wangmo'), ('age', 18)]) 23 24 for i in dic.items(): #循环输出每个项目 25 print(i) 26 # ('name', 'wangmo') 27 # ('age', 18) 28 29 for k,v in dic.items(): #循环输出每个项目 30 print(k,v) 31 # name wangmo 32 # age 18 33 34 print(dic.keys()) #输出字典的key值 35 #dict_keys(['name', 'age']) 36 37 for i in dic.keys(): #循环输出字典的key值 38 print(i) 39 # name 40 # age 41 42 for i in dic.keys(): #可以循环输出key和value 43 print('key is %s,value is %s' %(i,dic[i])) 44 # key is age,value is 18 45 # key is name,value is wangmo
1 dic = {"name" : "wangmo" ,"age" : 18} 2 3 #dic.pop("name") #删除一个一对key-value,没有会报错 4 print(dic) 5 #{'age': 18} 6 7 #dic.popitem() #随机删除一对key-value,一般不用 8 print(dic) 9 #{'name': 'wangmo'} 10 11 dic.setdefault("gender","M") #如果键不已经存在于字典中,将会添加键并将值设为默认值 12 print(dic) 13 dic.setdefault("gender","W") 14 print(dic) 15 # {'gender': 'M', 'name': 'wangmo', 'age': 18} 16 # {'gender': 'M', 'name': 'wangmo', 'age': 18} 17 18 dic.setdefault('gender1',[]) #也可以接一个列表 19 print(dic) 20 dic.setdefault('gender1',[]).append('male') 21 print(dic) 22 # {'gender1': [], 'name': 'wangmo', 'age': 18, 'gender': 'M'} 23 # {'gender1': ['male'], 'name': 'wangmo', 'age': 18, 'gender': 'M'}
1 dic={'name':"wangmo",'gender':'?'} 2 dic1={'gender':'male'} 3 4 dic.update(dic1) #用dic1更新dic 5 print(dic) 6 #{'name': 'wangmo', 'gender': 'male'} 7 8 dic1={'gender':'male','age':25} 9 dic.update(dic1) #用dic1更新dic 10 print(dic) 11 #{'gender': 'male', 'age': 25, 'name': 'wangmo'} 12 13 print(dic1.values()) #打印value 14 #dict_values([25, 'male'] 15 16 for i in dic1.values(): #循环打印value 17 print(i) 18 # 25 19 # male 20 21 data = dic.fromkeys([1,2,3]) #创建一个新字典,以序列seq中元素做字典的键,value为字典所有键对应的初始值 22 print(data) 23 #{1: None, 2: None, 3: None} 24 25 data = dic.fromkeys([1,2,3],'mo') #后面的value都一样 26 print(data) 27 #{1: 'mo', 2: 'mo', 3: 'mo'} 28 29 data = dic.fromkeys([1,2,3],{'name':'mo','age':'25'}) #后面接一个字典 30 print(data) 31 data[1]['name']='MM' #只要改了一位,其他value都改了 32 print(data) 33 #{1: {'age': '25', 'name': 'mo'}, 2: {'age': '25', 'name': 'mo'}, 3: {'age': '25', 'name': 'mo'}} 34 #{1: {'name': 'MM', 'age': '25'}, 2: {'name': 'MM', 'age': '25'}, 3: {'name': 'MM', 'age': '25'}}
1 dic={'name':'mo','age':25,'gfs':['a','b','c']} #这里涉及一个浅copy问题,只copy第一层 2 dic2=dic.copy() #字典的copy 3 print(dic) 4 # {'age': 25, 'gfs': ['a', 'b', 'c'], 'name': 'mo'} 5 print(dic2) 6 # {'age': 25, 'gfs': ['a', 'b', 'c'], 'name': 'mo'} 7 dic2['name']='oo' #更改一个value值 8 print(dic,dic2) 9 # {'age': 25, 'gfs': ['a', 'b', 'c'], 'name': 'mo'} {'age': 25, 'gfs': ['a', 'b', 'c'], 'name': 'oo'} 10 dic2['gfs'][2]='d' #更改value列表中的一个值 11 print(dic,dic2) 12 # {'age': 25, 'gfs': ['a', 'b', 'd'], 'name': 'mo'} {'age': 25, 'gfs': ['a', 'b', 'd'], 'name': 'oo'} 13 print(id(dic),id(dic2)) #打印id,都是通过内存地址改列表 14 #1933523997768 1933523997896 15 print(id(dic['gfs']),id(dic2['gfs'])) #第二层的id就是一样的了 16 #2108201311816 2108201311816 17 18 19 #深copy 20 import copy 21 dic3=copy.deepcopy(dic) 22 print(dic3) 23 #{'name': 'mo', 'gfs': ['a', 'b', 'd'], 'age': 25} 24 print(id(dic['gfs']),id(dic2['gfs']),id(dic3['gfs'])) #深copy的id变了 25 #1541085601352 1541085601352 1541087074824 26 27 28 #浅copy的一个场景: 29 acc1={'name':'林海峰','account':{'credit':3000,'balance':3000}} 30 acc2=acc1.copy() 31 acc2['name']='杠娘' 32 print(acc1) 33 print(acc2) 34 acc2['account']['credit'] -= 600 35 print(acc1) 36 print(acc2) 37 # {'name': '林海峰', 'account': {'credit': 3000, 'balance': 3000}} 38 # {'name': '杠娘', 'account': {'credit': 3000, 'balance': 3000}} 39 # {'name': '林海峰', 'account': {'credit': 2400, 'balance': 3000}} 40 # {'name': '杠娘', 'account': {'credit': 2400, 'balance': 3000}} 41 42 for k,v in acc1.items(): #输出key,value,数据量大不好用 43 print(k,v) 44 # name 林海峰 45 # account {'credit': 2400, 'balance': 3000} 46 47 for k in acc1: #输出key 48 print(k) 49 # name 50 # account 51 52 for k in acc1: 53 print(k,acc1[k]) 54 # account {'balance': 3000, 'credit': 2400} 55 # name 林海峰 56 #多用这个,item需要转换,数据量大不好用