zoukankan      html  css  js  c++  java
  • Python学习(五)--字典

            在Python中通过名字来引用值的数据结构称为映射(mapping)。字典是Python中唯一内建(Python解释器本身支持,不需要import)的映射类型。字典中的值没有特殊的顺序,都存储在一个特定的键(key)下。键可以是数字,字符串,甚至是元组。
     
    创建字典

            phonebook = {'Tom':'1234','Lily':'4567'}
            字典由两个大括号{}组成,空字典就可以这样表示{}。每个键和它的值之间用冒号 ':' 隔开。键可以是任意的不可变类型。项之间用逗号 ',' 隔开。也可以使用dict()函数来创建字典
            字典中的键是唯一的,而值不唯一。如果存在键名一样的项,后面的值会覆盖前面的。
    >>> a = {1:2,1:3,1:4,2:2}
    >>> a
    {1: 4, 2: 2} 
     
    基本字典操作

    1.len(d)
            返回字典d中项(键-值)的数目。
    2.d[k]
            返回关联到键k上的值。
    3.d[k] = v
            将值v关联到键k上。如果k不存在,就会建立新的项
    4.del d[k]
            删除键为k的项
    5.k in d
            检查字典d中是否含有键为k的项。
     
    字典的格式化字符串

    >>> phonebook={'Lily': '2345', 'Tom': '1234’}
    >>> "Tom's phone number is %(Tom)s." % phonebook
    "Tom's phone number is 1234."
            在每个转换说明符中的%字符后面,可以加上键(用圆括号括起来),后面再跟上其它说明元素。
     
    字典方法

    方法 例子 说明
    dict.clear()
    >>> phonebook
    {'Lily': '2345', 'Tom': '1234'}
    >>> phonebook.clear()
    >>> phonebook
    {}
    清除字典中所有的项,无返回值(或者说返回None)。这是个原地操作,即直接操作原始字典。
    dict.copy()
    >>> x = {'a':1,'b':2,'c':3}
    >>> y = x.copy()
    >>> y['c']=100
    >>> y
    {'a': 1, 'c': 100, 'b': 2}
    >>> x
    {'a': 1, 'c': 3, 'b': 2}
    返回一个具有相同键-值对的新字典。
    但是这个方法是浅复制。当在副本中替换值(例子中的重新赋值)的时候,原始字典不受影响。但是如果是修改某个值(不是替换,是修改,比如删除之类),原始字典也会改变。
    deepcopy(dict)   这个是深复制,区别于copy。得到新的副本后,修改不会影响原始字典。
    dict.fromkeys()
    >>> dict.fromkeys(['ef','gh'])
    {'ef': None, 'gh': None}
    使用给定的键建立新的字典,每个键都对应一个默认的值None。
    返回新的序列。
    可以{}.fromkeys(...)或者dict.fromkeys(....)
    dict.get()
    >>> x
    {'ab': '1', 'cd': '2'}
    >>> x.get('cd')
    '2'
    >>> x.get('aa')
    >>> print x.get('aa')
    None
    >>> x.get('aa','N/A')
    'N/A'
    访问字典项的方法,如果不存在,返回None。也可以自己定义找不到的时候返回值。
    dict.has_key()
    >>> x
    {'ab': '1', 'cd': '2'}
    >>> x.has_key('ab')
    True
    >>> x.has_key('ax')
    False
    检查字典中是否含有特定的键。
    这个表达式相当于k in d
    dict.items()
    >>> x
    {'ab': '1', 'cd': '2'}
    >>> x.items()
    [('ab', '1'), ('cd', '2')]
    将字典的所有项以列表方式返回,列表中每一项表示为(键,值)对的形式,但是返回没有特别的次序。
    dict.iteritems()
    >>> x
    {'ab': '1', 'cd': '2'}
    >>> it = x.iteritems()
    >>> list(it)
    [('ab', '1'), ('cd', '2')]
    类似ltems的作用,但是返回的是迭代器
    dict.keys()
    >>> x
    {'ab': '1', 'cd': '2'}
    >>> x.keys()
    ['ab', 'cd']
    将字典的键以列表的方式返回
    dict.pop()
    >>> x
    {'ab': '1', 'cd': '2'}
    >>> x.pop('ab')
    '1'
    >>> x
    {'cd': '2'}
    获得对应于给定键的值,然后将这个键-值对从字典中移除。
    dict.popitem()
    >>> x
    {'gh': '3', 'ab': '1', 'cd': '2'}
    >>> x.popitem()
    ('gh', '3')
    >>> x
    {'ab': '1', 'cd': '2'}
    作用类似pop,只是弹出列表中随机的项。
    dict.setdefault
    >>> x
    {'ab': '1', 'cd': '2'}
    >>> print x.setdefault('gh')
    None
    >>> x
    {'gh': None, 'ab': '1', 'cd': '2'}
    >>> print x.setdefault('ij','N/A')
    N/A
    >>> x
    {'gh': None, 'ab': '1', 'ij': 'N/A', 'cd': '2'}
    >>> x.setdefault('ab')
    '1'
    某种程度上类似于get方法。
    当键不存在的时候,setdefault返回默认值并且相应的更新字典,默认值是可以选的,也可以自己设定值。。如果键存在,那么就返回与其对应的值,但不改变字典。
    dict.update()
    >>> y
    {'mm': 'haha', 'cd': 'kk'}
    >>> x
    {'gh': None, 'ab': '1', 'ij': 'N/A', 'cd': '2'}
    >>> x.update(y)
    >>> x
    {'ab': '1', 'mm': 'haha', 'cd': 'kk', 'ij': 'N/A', 'gh': None}
    利用好一个字典项来更新另外一个字典。提供的字典中的项会被添加到旧的字典中,若有相同的键会进行覆盖
    d.values()
    >>> x
    {'ab': '1', 'mm': 'haha', 'cd': 'kk', 'ij': 'N/A', 'gh': None}
    >>> x.values()
    ['1', 'haha', 'kk', 'N/A', None]
    以列表的方式返回字典中的值,返回值的列表中可以包含重复的元素。
     
            clear的特别说明:所谓的直接操作原始字典可以从下面两个例子对比来看
    例子1:
    >>> x={}
    >>> y=x
    >>> x['key']='value'
    >>> y
    {'key': 'value'}
    >>> x={}
    >>> y
    {'key': 'value'}
    例子2:
    >>> x={}
    >>> y=x
    >>> x['key']='value'
    >>> y
    {'key': 'value'}
    >>> x.clear()
    >>> y
    {}
            从上面的两个例子来看,x,y最初都对应同一个字典,例子1中通过将x重新关联到一个新的空字典来达到清空的目的,对y没有影响。但是例子2里,通过clear方法来清空原始数据里的元素,就会影响到y。
  • 相关阅读:
    【Vue】 computed和watch的区别
    【总结】html5新增标签以及css3新增属性
    【前端经典面试题】前后端分离(说一说你理解的前后端分离?)
    【前端面试CSS】—垂直水平居中终极版
    【CSS】清浮动的常用四种方法
    【前端面试CSS】——盒子模型(标准模型和怪异模型)
    【JavaScript】JS常用的方法总结(不定期更新中)
    【Cordova】开发app遇到的坑之 按两次返回键退出程序
    【JavaScript】深拷贝和浅拷贝的总结(含义、区别及实现)
    【vue】路由传参的三种方式
  • 原文地址:https://www.cnblogs.com/mujiujiu/p/7825043.html
Copyright © 2011-2022 走看看