Python 学习笔记(九)Python元组和字典(三)

字典常用方法

copy() 返回一个字典的浅复制

示例:浅拷贝d.copy() 

   深拷贝引入import copy   copy.deepcopy()

 1 >>> help(dict.copy)  #help()查看dict.copy的详细内容
 2 Help on method_descriptor:
 3 
 4 copy(...)
 5     D.copy() -> a shallow copy of D  #字典d的浅拷贝
 6 
 7 >>> d ={"name":"python","web":"www.baidu.com"}
 8 >>> e =d
 9 >>> e
10 {'web': 'www.baidu.com', 'name': 'python'}
11 >>> d
12 {'web': 'www.baidu.com', 'name': 'python'}
13 >>> id(e)
14 49259112L
15 >>> id(d)   #可以看出e和d在内存中地址相同,e和d引用的是同一个对象
16 49259112L
17 >>> f=d.copy() #字典d的浅复制   
18 >>> f
19 {'web': 'www.baidu.com', 'name': 'python'}
20 >>> id(f)  #可以看出f与上面的e和d的内存地址不同,f创建了新的字典对象
21 13708552L
22 >>> d["lang"]="python"  #向字典d中添加一个对象,d中发生了变化,字典f并没有收到影响,说明字典f是一个新的字典对象,d 和f 是两个不同的对象
23 >>> d
24 {'lang': 'python', 'web': 'www.baidu.com', 'name': 'python'}
25 >>> f    
26 {'web': 'www.baidu.com', 'name': 'python'}
27 >>> d={"name":"zhangsan","enjoy":["python","tea","book"]}  #新建一个字典
28 >>> e =d.copy()   #对字典进行copy
29 >>> id(d),id(e)  #看出他俩的内存地址不同,是两个不同的对象
30 (13708280L, 13719208L)
31 >>> d["enjoy"]   #从字典d中取出enjoy所对应的列表的值
32 ['python', 'tea', 'book']
33 >>> d["enjoy"].remove("book") #将字典d中key为enjoy,值为book的元素移除
34 >>> d     #d 中的book已经被移除
35 {'enjoy': ['python', 'tea'], 'name': 'zhangsan'}
36 >>> e    #e中的book也被移除了
37 {'enjoy': ['python', 'tea'], 'name': 'zhangsan'}
38 >>> id(d["enjoy"]) #查看d['enjoy']的内存地址 与e['enjoy']的内存地址相同,说明是同一对象,copy只进行了浅拷贝,并没有对enjoy列表进行拷贝,只是引用
39 49135752L
40 >>> id(e["enjoy"])
41 49135752L
42 >>> import copy  #引入copy模块进行 深拷贝
43 >>> d
44 {'enjoy': ['python', 'tea'], 'name': 'zhangsan'}
45 >>> z =copy.deepcopy(d) #深拷贝
46 >>> z
47 {'enjoy': ['python', 'tea'], 'name': 'zhangsan'}
48 >>> id(d),id(z)  #可看出d和z 是不同的两个对象
49 (13708280L, 13720296L) 
50 >>> id(d['enjoy']),id(z['enjoy'])  #可看出d['enjoy']和z['enjopy'] 内存地址不同,是两个不同对象
51 (49135752L, 50109128L)

clear() 删除字典内所有元素 

  clear是清除字典中的元素,不是把这个字典删除,

  删除字典需要用del

  清空字典也可用e={}

 1 >>> help(dict.clear)
 2 Help on method_descriptor:
 3 
 4 clear(...)
 5     D.clear() -> None.  Remove all items from D. #删除字典中的所有元素
 6 
 7 >>> z
 8 {'enjoy': ['python', 'tea'], 'name': 'zhangsan'}
 9 >>> z.clear() #清除字典z中的元素
10 >>> z   #字典中的元素为空,字典存在,没有删除字典
11 {}
12 >>> del z  #删除字典可用del 
13 >>> e
14 {'enjoy': ['python', 'tea'], 'name': 'zhangsan'}
15 >>> e ={}  #清空字典中的元素可以使用e={}
16 >>> e
17 {}
18 >>>

get()  返回指定键的值,如果值不在字典中返回default值

 1 >>> help(dict.get)
 2 Help on method_descriptor:
 3 
 4 get(...)
 5     D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None. 如果k存在于d中则返回key所对应的值,否则默认返回None
 6 
 7 >>> d = {"enjoy":["python","tea"],"name":"zhangsan"}
 8 >>> d
 9 {'enjoy': ['python', 'tea'], 'name': 'zhangsan'}
10 >>> d.get("name") #返回指定键name,所对应的值
11 'zhangsan'
12 >>> d.get("enjoy") #返回指定键enjoy,所对应的值
13 ['python', 'tea']
14 >>> d["name"]  #这种方式也可以获取,与d.get()的区别,就是如果字典中没有key值,将会报错keyError 如下示例
15 'zhangsan'
16 >>> d.get("teacher") #如果d.get("teacher")不存在则返回默认值none
17 >>> d.get("teacher","laoshi") #如果d.get("teacher")不存在,则返回后面的值
18 'laoshi'
19 >>> d["teacher"]
20 Traceback (most recent call last):
21   File "<stdin>", line 1, in <module>
22 KeyError: 'teacher'
23 >>>

setdefault() 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default

 1 >>> help(dict.setdefault)
 2 Help on method_descriptor:
 3 
 4 setdefault(...)
 5     D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D
 6 
 7 >>> d
 8 {'enjoy': ['python', 'tea'], 'name': 'zhangsan'}
 9 >>> d.setdefault("name")  #取出d中key为name的值
10 'zhangsan'
11 >>> d.setdefault("city","beijing") #city 不存在与字典中,则将city添加与字典中,city为key,beijing为value
12 'beijing'
13 >>> d
14 {'enjoy': ['python', 'tea'], 'city': 'beijing', 'name': 'zhangsan'}
15 >>> d.setdefault("teacher")  #teacher 不存在于字典中,则将teacher 作为key,value为none加入字典中
16 >>> d
17 {'enjoy': ['python', 'tea'], 'city': 'beijing', 'name': 'zhangsan', 'teacher': None}
18 >>>

items() 以列表返回可遍历的(键, 值) 元组数组

iteritems() 与items()方法类似,返回的是一个迭代器

 1 >>> help(dict.items)
 2 Help on method_descriptor:
 3 
 4 items(...)
 5     D.items() -> list of D's (key, value) pairs, as 2-tuples #通过字典items方法得到的是含有字典key value元组为元素的列表
 6 
 7 >>> d
 8 {'enjoy': ['python', 'tea'], 'city': 'beijing', 'name': 'zhangsan', 'teacher': None}
 9 >>> d.items() #得到key、value元组为元素的列表
10 [('enjoy', ['python', 'tea']), ('city', 'beijing'), ('name', 'zhangsan'), ('teacher', None)]
11 >>> help(dict.iteritems)
12 Help on method_descriptor:
13 
14 iteritems(...)
15     D.iteritems() -> an iterator over the (key, value) items of D
16 
17 >>> d_iter=d.iteritems()
18 >>> type(d_iter)  
19 <type 'dictionary-itemiterator'>
20 >>> d_iter  
21 <dictionary-itemiterator object at 0x00000000013EDD68>
22 >>> list(d_iter) 
23 [('enjoy', ['python', 'tea']), ('city', 'beijing'), ('name', 'zhangsan'), ('teacher', None)]
24 >>>

keys() 以列表返回一个字典所有的键

iterkeys()

 1 >>> help(dict.keys)
 2 Help on method_descriptor:
 3 
 4 keys(...)
 5     D.keys() -> list of D's keys  #用这个方法,得到一个列表,这个列表是以字典key为元素来组成的
 6 
 7 >>> d
 8 {'enjoy': ['python', 'tea'], 'city': 'beijing', 'name': 'zhangsan', 'teacher': None}
 9 >>> d.keys() #得到字典中所有的key
10 ['enjoy', 'city', 'name', 'teacher']
11 >>> d.iterkeys() #迭代器
12 <dictionary-keyiterator object at 0x00000000013EDE58>
13 >>>

values() 以列表返回字典中的所有值

itervalues()

1 >>> d.values()  #得到字典value的列表
2 [['python', 'tea'], 'beijing', 'zhangsan', None]
3 >>> d.itervalues() #迭代器
4 <dictionary-valueiterator object at 0x00000000013EDE58>
5 >>>

pop()    删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。

 1 >>> help(dict.pop)
 2 Help on method_descriptor:
 3 #参数至少有一个key,相应着会返回一个字典中key所对应的value.
  #如果字典中没有key,就返回第二个参数d的值,但如果d的值不写,就会报错 4 pop(...) 5 D.pop(k[,d]) -> v, remove specified key and return the corresponding value. 6 If key is not found, d is returned if given, otherwise KeyError is raised 7 8 >>> d 9 {'enjoy': ['python', 'tea'], 'city': 'beijing', 'name': 'zhangsan', 'teacher': None} 10 >>> d.pop("enjoy")#删除enjoy键值对,返回的是enjoy对应的value值 11 ['python', 'tea'] 12 >>> d 13 {'city': 'beijing', 'name': 'zhangsan', 'teacher': None} 14 >>> d.pop("enjoy","python") #在字典d中已经没有enjoy这个键值对,返回第二个参数python 15 'python' 16 >>>

popitem()  随机返回并删除字典中的一对键和值。

 1 >>> help(dict.popitem)
 2 Help on method_descriptor:
 3 
 4 popitem(...)
 5     D.popitem() -> (k, v), remove and return some (key, value) pair as a
 6     2-tuple; but raise KeyError if D is empty.
 7 
 8 >>> d
 9 {'city': 'beijing', 'name': 'zhangsan', 'teacher': None}
10 >>> d.popitem()   #返回删除的键值对,每次只能删除一个,且是随机删除一个键值对,如果已经没有键值对了,再去删除就会报错
11 ('city', 'beijing')
12 >>> d.popitem()
13 ('name', 'zhangsan')
14 >>> d.popitem()
15 ('teacher', None)
16 >>> d.popitem()
17 Traceback (most recent call last):
18   File "<stdin>", line 1, in <module>
19 KeyError: 'popitem(): dictionary is empty'
20 >>>

update ()   把字典dict2的键/值对更新到dict里

1.返回值是none

2.以字典或可迭代对象为参数

3.如果参数有keys方法,就会循环E中的k,实现D[k]=E[kj]

 1 >>> help(dict.update)
 2 Help on method_descriptor:
 3 
 4 update(...)
 5     D.update([E, ]**F) -> None.  Update D from dict/iterable E and F.
 6     If E present and has a .keys() method, does:     for k in E: D[k] = E[k]
 7     If E present and lacks .keys() method, does:     for (k, v) in E: D[k] = v
 8     In either case, this is followed by: for k in F: D[k] = F[k]
 9 
10 >>> d1={"lang":"python"}
11 >>> d2={"name":"zhangsan"}
12 >>> d1.update(d2)
13 >>> d1
14 {'lang': 'python', 'name': 'zhangsan'}
15 >>> d2
16 {'name': 'zhangsan'}
17 >>> d2.update([("city","beijing"),("web","java"),("site","baidu.com")])
18 >>> d2
19 {'site': 'baidu.com', 'city': 'beijing', 'name': 'zhangsan', 'web': 'java'}
20 >>>

has_key() 如果键在字典dict里返回true,否则返回false

 1 >>> help(dict.has_key)
 2 Help on method_descriptor:
 3 
 4 has_key(...)
 5     D.has_key(k) -> True if D has a key k, else False
 6 
 7 >>> d2.has_key("city") #判断key是否存在
 8 True
 9 >>> "city" in d2
10 True
11 >>>

 

posted @ 2018-03-14 21:26  冰雪柔情的天空  阅读(253)  评论(0编辑  收藏  举报