zoukankan      html  css  js  c++  java
  • python 字典

    python dictionary

    字典由对个键以及与其对应的值构成
    可以如下创建:
    >>> phonebook={'qiao':'119','lisi':'101','zhaowo':'787'}

    dict函数
    >>> items = [('name','qiaoc'),('age',26)]
    >>> d=dict(items)
    >>> d
    {'age': 26, 'name': 'qiaoc'}
    >>> d['name']
    'qiaoc'

    还可以通过关键字参数来创建字典
    >>> d=dict(id='111',name='qiao')
    >>> d
    {'name': 'qiao', 'id': '111'}

    --------------------基本操作---------------------------------

    >>> d
    {'name': 'qiao', 'id': '111'}
    >>> len(d)       -------------- len 返回键值对的数量
    2
    >>> d['id']    -------d[k] 返回关联到k上的值
    '111'
    >>> d['id'] = '123'    ----将值关联到对应的key上
    >>> d['id']
    '123'
    >>> d
    {'name': 'qiao', 'id': '123'}
    >>> del d['id']    ----------删除键为key的项
    >>> d
    {'name': 'qiao'}
    >>> 'name' in d    ---------检查d中是否含有'name'的项
    True

    注意:第一点 ,键可以为任何不可改变类型 --- 字典最强大的地方
    第二点,如下:
    >>> x=[]
    >>> x[2]='fllo'
    Traceback (most recent call last):
      File "<pyshell#241>", line 1, in <module>
        x[2]='fllo'
    IndexError: list assignment index out of range
    >>> x={}
    >>> x[2]='fllo'
    >>> x
    {2: 'fllo'}

    字典格式化字符串
    >>> phonebook={'qiao':'119','lisi':'101','zhaowo':'787'}
    >>> "qiao's phone is %(qiao)s." % phonebook
    "qiao's phone is 119."

    >>> template = '''<html>
    <head><title>%(title)s</title></head>
    <body>...</body>'''
    >>> data={'title':'My Home Page'}
    >>> print template % data
    <html>
    <head><title>My Home Page</title></head>
    <body>...</body>

    ----------------------------字典方法--------------------------------

    1. clear方法
    清除字典中的所有项
    >>> phonebook={'qiao':'119','lisi':'101','zhaowo':'787'}
    >>> return_value = phonebook.clear()
    >>> phonebook
    {}
    >>> return_value

    >>> phonebook={'qiao':'119','lisi':'101','zhaowo':'787'}
    >>> phonebook.clear()
    >>>

    注意:
    >>> x={}
    >>> y=x
    >>> x['key']='val'
    >>> y
    {'key': 'val'}
    >>> x={}
    >>> y
    {'key': 'val'}

    这里x和y最初指向同一个字典,但是后来x关联到一个空字典来清空它,y则还是以前的字典,所以y不变


    2.copy方法
    返回一个具有相同键-值对的新字典
    >>> x={'username':'admin','machines':['foo','bar','baz']}
    >>> y=x.copy()
    >>> y['username']='qiao'
    >>> y['machines'].remove('bar')
    >>> y
    {'username': 'qiao', 'machines': ['foo', 'baz']}
    >>> x
    {'username': 'admin', 'machines': ['foo', 'baz']}
    注意:当在副本中替换值的时候,原始字典不受影响,但是,如果修改了某个值(原地修改,而不是替换),
    原始的字典也会改变,因为同样的值也存储在原字典中,为了避免这个问题可以使用深复制,复制其包含所有的值,如下:
    >>> from copy import deepcopy
    >>> d={}
    >>> d['names']=['Alfred','Brenad']
    >>> c=d.copy()
    >>> dc=deepcopy(d)
    >>> d['names'].append('Clive')
    >>> c
    {'names': ['Alfred', 'Brenad', 'Clive']}
    >>> dc
    {'names': ['Alfred', 'Brenad']}

    3. fromkeys 方法
    使用给定的键建立新的字典,每个键默认对应的值为None
    >>> {}.fromkeys(['name','age'])
    {'age': None, 'name': None}
    >>> dict.fromkeys(['name','age'],'(unknowns)')   ---可以自己提供默认值
    {'age': '(unknowns)', 'name': '(unknowns)'}

    4. get 方法
    是个更宽松的访问字典的方法

    >>> d={}
    >>> print d['name']
    Traceback (most recent call last):
      File "<pyshell#299>", line 1, in <module>
        print d['name']
    KeyError: 'name'
    注意:访问字典中不存在的项时会报错,但是用get就不会报错
    >>> print d.get('name')
    None
    >>> print d.get('name','sasasd')  ----当取的key值不存在时可以自己定义返回值
    sasasd

    5. has_key 方法
    检查字典中是否含有给出的键
    >>> phonebook={'qiao':'119','lisi':'101','zhaowo':'787'}
    >>> phonebook.has_key('qiao')
    True

    6. items 和 iteritems
    items所有字典项以列表的形式返回,这些项中的每一项都来自于(键值),但是返回时没有特殊的顺序
    >>> phonebook={'qiao':'119','lisi':'101','zhaowo':'787'}
    >>> phonebook.items()
    [('lisi', '101'), ('zhaowo', '787'), ('qiao', '119')]

    iteritems大致相同,但是返回一个迭代器对象而不是列表
    >>> it = phonebook.iteritems()
    >>> it
    <dictionary-itemiterator object at 0x0000000002ED69F8>
    >>> list(it)
    [('lisi', '101'), ('zhaowo', '787'), ('qiao', '119')]
    很多情况使用迭代器效率更高

    7. keys 和 iterkeys
    keys方法将字典中的键以列表形式返回,iterkeys则返回针对键的迭代器
    >>> phonebook={'qiao':'119','lisi':'101','zhaowo':'787'}
    >>> phonebook.keys()
    ['lisi', 'zhaowo', 'qiao']
    >>> itk = phonebook.iterkeys()
    >>> itk
    <dictionary-keyiterator object at 0x0000000002ED6A48>

    >>> list(itk)
    ['lisi', 'zhaowo', 'qiao']


    8. pop方法
    用来获得对应于给定键的值,然后将这个键-值对从字典中移除
    >>> d={'x':1,'y':2}
    >>> d.pop('x')
    1
    >>> d
    {'y': 2}

    9. popitem 方法
    类似于list.pop,后者会弹出列表的最后一个元素。但不同的是,popitem弹出随机的项,因为字典并没有“最后元素”的概念,
    >>> d={'url':'www.baidu.com','span':'ll','title':'fuck'}
    >>> d.popitem()
    ('url', 'www.baidu.com')
    >>> d
    {'span': 'll', 'title': 'fuck'}
    >>> d.popitem()
    ('span', 'll')
    >>> d
    {'title': 'fuck'}

    10. setdefault 方法
    类似于get方法,获得给定键的值,但是还能在字典中不含有给给定键的情况下设定相应的键值。
    >>> d={}
    >>> d.setdefault('name','qiao')
    'qiao'
    >>> d
    {'name': 'qiao'}
    >>> d['name']='chjao'
    >>> d
    {'name': 'chjao'}
    >>> d.setdefault('name')
    'chjao'
    >>> d.setdefault('name','qiao')
    'chjao'
    >>> d
    {'name': 'chjao'}
    >>> d.setdefault('id')
    >>> d
    {'name': 'chjao', 'id': None}

    11. update 方法
    可以利用一个字典项更新另外一个字典
    >>> d={'url':'www.baidu.com','span':'ll','title':'fuck'}
    >>> x={'name':'qiao','url':'hsaxxc'}
    >>> d.update(x)
    >>> d
    {'url': 'hsaxxc', 'span': 'll', 'name': 'qiao', 'title': 'fuck'}
    注意:提供的字典项会添加到旧的字典中,若有相同的键则会进行覆盖

    12. values 和 itervalues
    values 以列表的形式返回字典中的值,itervalues则返回迭代器,与返回键的列表不同的是,返回值的列表中可以包含重复的元素
    >>> d={}
    >>> d[1]=1
    >>> d[2]=3
    >>> d[3]=4
    >>> d
    {1: 1, 2: 3, 3: 4}
    >>> d.values()
    [1, 3, 4]

    ======================================================================

  • 相关阅读:
    正则表达式
    iOS获取设备型号、设备类型等信息
    Dubbo-Zookeeper安装
    CentOS-常用安装
    多线程-线程通信
    JVM-高效并发
    静态代理与JDK动态代理
    JVM-类加载机制
    RPC原理及实现
    JVM-自动内存管理机制
  • 原文地址:https://www.cnblogs.com/java20130722/p/3206915.html
Copyright © 2011-2022 走看看