美文网首页python基础
内置数据结构-字典

内置数据结构-字典

作者: loveroot | 来源:发表于2017-01-10 22:08 被阅读19次

    字典是Key : Value结构的数据结构

    • key必须为可hash
    • key必须唯一
    • value可为任意对象
    • 不能切片,可迭代, 可修改
    创建字典
    初始化一个空字典
    d = dict() or d = {}
    
    创建有元素的字典
    In [9]: d = dict({'a':2})
    
    In [10]: d
    Out[10]: {'a': 2}
    
    In [13]: d2 = {'k1': 'hello', 'k2': 'python'}
    
    In [11]: type(d)
    Out[11]: dict
    
    下标来操作字典
    In [15]: d2['k1']
    Out[15]: 'hello'
    
    下标访问不存在的key时会报错
    In [16]: d2['k3']
    ---------------------------------------------------------------------------
    KeyError                                  Traceback (most recent call last)
    <ipython-input-16-8f242878f70d> in <module>()
    ----> 1 d2['k3']
    
    KeyError: 'k3'
    
    增加元素,如果key存在,则会覆盖旧的value
    通过下标增加
    In [17]: d2['k3'] = '!'
    
    In [18]: d2
    Out[18]: {'k1': 'hello', 'k2': 'python', 'k3': '!'}
    
    update()方法增加
    In [19]: d
    Out[19]: {'a': 2}
    
    通过字典增加
    In [20]: d.update({'b': 3, 'c': 4})
    
    In [21]: d
    Out[21]: {'a': 2, 'b': 3, 'c': 4}
    
    通过二元组组成的可迭代对象
    In [23]: d.update([('e', 10), ('f', 11)])
    
    In [24]: d
    Out[24]: {'a': 2, 'b': 3, 'c': 4, 'e': 10, 'f': 11}
    
    通过关键字参数
    In [25]: d.update(g=100)
    
    In [26]: d
    Out[26]: {'a': 2, 'b': 3, 'c': 4, 'e': 10, 'f': 11, 'g': 100}
    
    通过 setdefault()增加,如果再次setdefault已经存在的key则不会修改value
    In [41]: d.setdefault('a', 'a')
    Out[41]: 'a'
    
    In [42]: d
    Out[42]: {'a': 'a', 'b': 3, 'e': 10, 'f': 11, 'g': 100}
    
    In [43]: d['a'] = 123
    
    In [44]: d
    Out[44]: {'a': 123, 'b': 3, 'e': 10, 'f': 11, 'g': 100}
    
    In [51]: d.setdefault('a',234)
    Out[51]: 123
    
    In [52]: d
    Out[52]: {'a': 123, 'b': 3, 'e': 10, 'f': 11, 'g': 100}
    
    
    
    删除元素
    
    In [27]: d
    Out[27]: {'a': 2, 'b': 3, 'c': 4, 'e': 10, 'f': 11, 'g': 100}
    
    In [28]: d.pop('a')
    Out[28]: 2
    
    删除不存在的key时,给定了默认值不会报keyerror,并返回此值 
    In [29]: d.pop('aa','not exist')
    Out[29]: 'not exist'
    
    In [30]: d.pop('aa')
    ---------------------------------------------------------------------------
    KeyError                                  Traceback (most recent call last)
    <ipython-input-30-8506ee8a21ae> in <module>()
    ----> 1 d.pop('aa')
    
    KeyError: 'aa'
    
    
    popitem()随机弹出一个key-value元组,如果字典为空则KeyError
    In [31]: d
    Out[31]: {'b': 3, 'c': 4, 'e': 10, 'f': 11, 'g': 100}
    
    In [32]: d.popitem()
    Out[32]: ('c', 4)
    
    In [33]: d3 = {}
    
    In [34]: d3.popitem()
    ---------------------------------------------------------------------------
    KeyError                                  Traceback (most recent call last)
    <ipython-input-34-aad629fbb3ef> in <module>()
    ----> 1 d3.popitem()
    
    KeyError: 'popitem(): dictionary is empty'
    
    
    clear() 清空字典
    
    通过get()访问元素,与下标不同的是get的key不存在的时候返回None,给定了默认值返回此值
    In [36]: d
    Out[36]: {'b': 3, 'e': 10, 'f': 11, 'g': 100}
    
    In [37]: d.get('b')
    Out[37]: 3
    
    In [38]: d.get('bb')
    
    In [39]: d.get('bb', 'bb not exist')
    Out[39]: 'bb not exist'
    
    
    扩展
    In [45]: from collections import defaultdict
    
    defaultdict和普通dict类似,只是初始化的时候需要给定一个默认的可调用对象
    In [46]: dd = defaultdict(list)
    
    In [47]: dd
    Out[47]: defaultdict(list, {})
    
    get无返回值 
    In [48]: dd.get('a')
    
    通过下标访问不存在的元素时会返回传入的可调用对象的实例
    In [49]: dd['a']
    Out[49]: []
    
    
    字典的遍历
    
    In [1]: d = {'k1': 'hello', 'k2': 'python'}
    
    keys()方法返回一个 类set对象,可以和集合做运算
    In [2]: d.keys()
    Out[2]: dict_keys(['k1', 'k2'])
    
    In [3]: for k in d.keys():
       ...:     print('{}=>{}'.format(k, d[k]))
       ...:     
    k1=>hello
    k2=>python 
    
    In [4]: d.keys() | {1,2}
    Out[4]: {'k1', 1, 2, 'k2'}
    
    
    d.values()返回一个dict.values对象,因为value是可以重复的,所以不是类set对象, 不能和集合做运算
    In [5]: d.values()
    Out[5]: dict_values(['hello', 'python'])
    
    In [6]: help(d.values)
    Help on built-in function values:
    
    values(...) method of builtins.dict instance
        D.values() -> an object providing a view on D's values
    
    
    In [7]: d.values() | {1,2}
    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    <ipython-input-7-d9a6c76f0b9f> in <module>()
    ----> 1 d.values() | {1,2}
    
    TypeError: unsupported operand type(s) for |: 'dict_values' and 'set'
    
     
    遍历key和value
    d.items()方法返回一个 类set对象,每个元素是一个Key-value二元组
    In [8]: d.items()
    Out[8]: dict_items([('k1', 'hello'), ('k2', 'python')])
    
    In [9]: for k, v in d.items():
       ...:     print(k, v)
       ...:     
    k1 hello
    k2 python
    
    
    fromkeys() 方法接收一个可迭代对象,和一个初始值 ,返回一个字典
    
    In [10]: dict.fromkeys(['a', 'b', 'c'], None)
    Out[10]: {'a': None, 'b': None, 'c': None}
    
    In [11]: dict.fromkeys(['a', 'b', 'c'], True)
    Out[11]: {'a': True, 'b': True, 'c': True}
    
    In [12]: dict.fromkeys(['a', 'b', 'c'], 'python')
    Out[12]: {'a': 'python', 'b': 'python', 'c': 'python'}
    
    

    相关文章

      网友评论

        本文标题:内置数据结构-字典

        本文链接:https://www.haomeiwen.com/subject/cwuwvttx.html