设为首页 收藏本站
查看: 1564|回复: 0

[经验分享] python数据结构-字典

[复制链接]
发表于 2018-8-16 10:08:20 | 显示全部楼层 |阅读模式
  概述:
  创建字典(a、键和值之间用冒号(:)隔开,项之间用逗号(,)隔开。
  b、dict函数)
  字典基本操作:len(zd)\d[zd]\d[zd]=v\del d[zd]\d in zd\   (其中zd需要替换为字典名称)
  字典格式化字符串:
  字典方法:clear\copy\fromkeys\get\han_key\items\keys\pop\popitem\setdefault\update\values
  字典是python中唯一内建的映射类型。(映射是通过名字引用值的数据结构)。
  字典中的值没有特殊顺序,但是都存储在一个特定的键(key)中。键可以是数字、字符串、元组。
  一、创建字典:
  1、创建字典:
  de 如:
  phonebook={‘zhangsan':'233333','lisi':'322233','wangwu':'4323334'}
  字典由多个键及其对应的值构成的对组(也把键/值对 称为项)。在phonebook示例中,名字是键,电话号码是值。键和值之间用冒号(:)隔开,项之间用逗号(,)隔开。整个字典由一对大括号括起来。空字典(不包括任何项)由两个大括号组成,如{ }。
  2、dict函数创建字典:
  2.1、   dict函数通过其他映射(比如其他字典)或者(键,值)这样的序列对建立字典。
  //    键可以为任何不可变类型
  如:
  >>> items=[('name','zhangsan'),('age',44)]
  >>> d=dict(items)
  >>> d
  {'age': 44, 'name': 'zhangsan'}
  >>>
  2.2、    dict函数也可以通过关键字参数来创建字典;
  如:
  >>> a=dict(name='lisi',age=44)
  >>> d
  {'age': 44, 'name': 'zhangsan'}
  >>>
  注释:dict函数不是真正的函数,他是个类型,就像list、tuple和str一样。
  二、字典的基本操作:
  1、字典的基本行为和序列(sequence)类似:
  a)、len(d):返回d中项(键-值对)的数量;
  b)、d[k]:返回关联到键k上的值;
  c)、d[k]=v:将值v关联到键k上;
  d)、del d[k]:删除键为k的项;
  e)、k in d检查d中是否有含有键为k的值;
  2、字典和列表的区别:


    •   键类型:字典的键不一定为整型数据,也可能是其他不可变类型(如:浮点型、字符串、元组)
    •   自动添加:即使键起初不存在,也可以分配一个值,这样字典就会建立新的项。不能将值关联到列表范围之外的索引上。
        如:
        >>> x=[ ]                //定义一个空的列表
        >>> x[33]='300'    //定义列表位置34的值是‘300’,会报错,因为该位置不存在
        Traceback (most recent call last):
        File "", line 1, in
        IndexError: list assignment index out of range
        如果要实现x[33]='300',则需要使用如下:
        >>> x=[None]
        >>> x*3
        [None, None, None]
        >>>
        >>> x={ }                //定义一个空字典
        >>> x[33]='300'    //定义字典键34的值为‘300’
        >>> x
        {33: '300'}
        >>>
    •   成员资格:表达式 k in d(d为字典)查找的是键,而不是值。表达式 v in l(l为列表)则是用来查找值,而不是索引。

  3、字典的格式化字符串:
  格式:  %(键)格式化字符  %  变量    // 在每个转换说明中的%字符后面,加上键(用圆括号括起来),后面在跟上其他说明元素。
  如:
  >>> phonebook={'zhangsan':1001,'lisi':2002,'maliu':3003}    //字典值用字符串表示,因为0100 '0100'....
  >>> phonebook
  {'lisi': 2002, 'zhangsan': 1001, 'maliu': 3003}
  >>> print("zhangsan's num is %(zhangsan)s" % phonebook)
  zhangsan's num is 1001
  >>>
  三、字典方法:clear\copy\fromkeys\get\han_key\items\keys\pop\popitem\setdefault\update\values
  1、clear :清除字典中的所有项。无返回值。
  如:
  >>> phonebook={'zhangsan':1001,'lisi':2002,'maliu':3003}
  >>> phonebook.clear()
  >>> phonebook
  {}
  >>> print(phonebook)
  {}
  >>>
  注意:phonebook.clear()和phonebook={} 虽然都是将字典置空,但是当有变量引用他们时就会有不同。
  如:
>>> x={ }  >>> y=x
  >>> x['key']='value'
  >>> y
  {'key': 'value'}
  >>> x.clear()
  >>> y
  {}
  >>>
>>> x={ }  >>> y=x
  >>> x['key']='value'
  >>> y
  {'key': 'value'}
  >>> x={}
  >>> y
  {'key': 'value'}
  >>>
  2、copy :返回一个具有相同键-值对的新字典。(潜复制)
  >>> phonebook={'zhangsan':1001,'lisi':2002,'maliu':3003}
  >>> a=phonebook.copy()
  >>> a
  {'lisi': 2002, 'zhangsan': 1001, 'maliu': 3003}
  3、fromkeys:使用给定的键建立新的字典,每个键默认对应的值为None.
  如:
  >>> {}.fromkeys(['name','age'])
  {'age': None, 'name': None}
  >>>
  4、get:访问字典项,如果访问不存在的键时,则返回None,也可以定义其他值,替换None。
  如:
  >>> a={ }        //访问的项不存在
  >>> a.get('name')
  >>> c=a.get('name')
  >>> print(c)
  None
  >>>
  定义其他值替换None:
  >>> a={ }
  >>> a.get('name', 'N/A')
  'N/A'
  >>>
  >>> phonebook={'zhangsan':1001,'lisi':2002,'maliu':3003}
  >>> phonebook.get('zhangsan')        //访问的项存在
  1001
  >>>
  5、han_key:检查字典中是否含有给出的键。表达式d.han_key(k)相当于表达式 k in d。(python3.x不包含这个函数。
  >>> d={'zhangsan':'20','lisi':'30','maliu':'32'}
  >>> d
  {'lisi': '30', 'zhangsan': '20', 'maliu': '32'}
  >>> d.items()
  [('lisi', '30'), ('zhangsan', '20'), ('maliu', '32')]
  >>> d.has_key('zhangsan')
  True
  >>> d.has_key('zhangsasn')
  False
  >>> d.has_key('zhangsan')
  True
  >>> 'zhangsan' in d
  True
  >>> '30' in d
  False
  >>>
  6、items和iteritems:items方法将所有的字典项以列表方式返回,这些列表中的每一项都来自于(键,值),但是项在返回时并没有特殊的顺序。
  >>> phonebook={'zhangsan':'1995','ls':'1996','ml':'1997',}
  >>> phonebook.items()
  [('ml', '1997'), ('zhangsan', '1995'), ('ls', '1996')]
  >>>
  7、keys和iterkeys:keys方法将字典中的键以列表的形式返回。而iterkeys则返回针对键的迭代器。
  如:
  >>> phonebook
  {'ml': '1997', 'zhangsan': '1995', 'ls': '1996'}
  >>> phonebook.keys()
  ['ml', 'zhangsan', 'ls']
  >>>
  8、pop:用来获得对应于给定键的值,然后将这个键-值对从字典中移除。
  如:
  >>> phonebook
  {'ml': '1997', 'ls': '1996'}
  >>> phonebook.pop('ml')
  '1997'
  >>> phonebook
  {'ls': '1996'}
  >>>
  9、popitem:类似于list.pop, list.pop会弹出列表的最后一个元素。但不同的是,popitem弹出随机的项,因为字典没有“最后的元素”的概念。如想一个接一个地移除并处理项,这个方法就非常有效了(因为不用首先获取键的列表)。
  如:
  >>> phonebook={'zhangsan':'1995','ls':'1996','ml':'1997',}
  >>>
  >>> phonebook.popitem()
  ('ml', '1997')
  >>> phonebook
  {'zhangsan': '1995', 'ls': '1996'}
  >>>
  10、setdefault:在某种程度上类似于get方法,就是能够获得与给定键相关联的值,除此之外,setdefault还能在字典中不含有给定键的情况下设定相应的键值。
  如:
  >>> phonebook
  {'zhangsan': '1995', 'ls': '1996'}
  >>> phonebook
  {'zhangsan': '1995', 'ls': '1996'}
  >>> phonebook.setdefault('name','N/A')        //没有值的情况下,设定值
  'N/A'
  >>> phonebook
  {'zhangsan': '1995', 'ls': '1996', 'name': 'N/A'}
  >>> phonebook.setdefault('ls')    //有值的情况下返回值。
  '1996'
  >>>
  11、update:方法可以利用一个字典项更新另外一个字典;
  >>> d
  {'url': 'http://www.python.org', 'change': 'oct 28 10:00:00 met 2016', 'title': 'python web site'}
  >>> x={'title':'python language website'}
  >>> d.update(x)
  >>> d
  {'url': 'http://www.python.org', 'change': 'oct 28 10:00:00 met 2016', 'title': 'python language website'}
  >>>
  注意:提供的字典中的项会被添加到旧的字典中,若有相同的键则会进行覆盖
  12、values和itervalues
  values方法以列表的形式返回字典中的值。返回值的列表中可以包含重复的元素。
  如:
  >>> d={}
  >>> d[1]=1
  >>> d[2]=2
  >>> d[3]=3
  >>> d[4]=4
  >>> d
  {1: 1, 2: 2, 3: 3, 4: 4}
  >>> d.values()
  [1, 2, 3, 4]
  >>>


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-552536-1-1.html 上篇帖子: Linux下python升级至2.7 下篇帖子: Python字符串的encode与decode-Farley
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表