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需要转换,数据量大不好用

 

posted @ 2016-10-25 11:27  wangmo  阅读(3192)  评论(1编辑  收藏  举报