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需要轉換,數據量大不好用

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM