zoukankan      html  css  js  c++  java
  • 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 >>>
  • 相关阅读:
    sql server支持gb18030里面的疑难中文字
    sql:把多列的数据转成行的一个字段
    CVS转SVN
    关于linux语言的设置
    [转]Windows server 2008网络负载均衡集群
    Get和Post、幂等、净荷
    EA经典教程
    Emeditor 斜线显示为人民币符号
    map和set(关于iterator失效的问题)
    scoket和浏览器的连接限制
  • 原文地址:https://www.cnblogs.com/wangruihua-521/p/8554950.html
Copyright © 2011-2022 走看看