7 字典

作者: 阿健在长安 | 来源:发表于2017-04-20 12:10 被阅读2次

    0. 引用廖雪峰的话

    列表、元组、字符串是序列类型,而字典是映射类型。
    举个例子,假设要根据同学的名字查找对应的成绩,如果用list实现,需要两个list:

    names = ['Michael', 'Bob', 'Tracy']
    scores = [95, 75, 85]
    

    给定一个名字,要查找对应的成绩,就先要在names中找到对应的位置,再从scores取出对应的成绩,list越长,耗时越长。
    如果用dict实现,只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢。用Python写一个dict如下:

    >>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
    >>> d['Michael']
    95
    

    1. 创建和访问字典

    字典由“键-值”组成:{键1:值1,键2,值2,......}

    dict = {1:'one',2:'two',3:'three'}
    print(dict[3])    #three
    

    注意:字典里面的键值是无序的,只能通过键去索引值,这不同于列表和元组。

    2. 内置方法

    1. fromkeys():创建并返回一个新的字典,常用于字典的初始化

    >>> dict = {}
    >>> dict.fromkeys((1,2,3))
    {1: None, 2: None, 3: None}
    >>> dict    #注意这里dict还是原来的空字典,fromkeys()返回了一个新字典
    {}
    >>> dict.fromkeys((1,2),'hello')
    {1: 'hello', 2: 'hello'}    #它并不会只修改1,2键的值,而是返回一个新的字典
    

    2. key():返回字典键的引用

    >>> dict1 = dict.fromkeys(range(3),'赞')
    >>> for i in dict1.keys():
        print(i)    
    0
    1
    2
    

    3. values():返回字典值的引用

    4. items():返回字典项的引用

    for i in dict1.items():
        print(i)
    (0, '赞')
    (1, '赞')
    (2, '赞')
    

    5. clear():清空一个字典

    >>> dict.clear()
    >>> dict
    {}
    

    注意:虽然dict = {}也能清空字典,但是有些时候还是有区别的,比如下面的例子。

    >>> a = {'name':'Tom'}        #a指向一个字典
    >>> b = a                            #b也指向这个字典
    >>> a = {}                           #a指向一个空字典,但不影响b
    >>> b
    {'name': 'Tom'}
    
    >>> a = {'name':'Tom'}    #a指向一个字典
    >>> b = a                        #b也指向这个字典
    >>> a.clear()                   #a清空,b也随之清空了
    >>> b
    {}
    

    6. copy():浅拷贝

    重点说浅拷贝与赋值的区别

    >>> a = {1:'one',2:'two'}    #a指向一个字典
    >>> b = a.copy()               #b为a的一个拷贝,即b指向另一个字典,内容与a指向的字典相同
    >>> c = a                           #c也指向a所指向的字典,那下面的现象容易理解
    >>> id(a)
    49783312
    >>> id(b)
    49770864
    >>> id(c)
    49783312
    >>> c[3] = 'three'
    >>> a
    {1: 'one', 2: 'two', 3: 'three'}
    >>> b
    {1: 'one', 2: 'two'}
    

    7. 再谈in

    • 在list中,in查找的是值。
    >>> list = [1,2,3]
    >>> 3 in list
    True
    
    • 而在dict中,in查找的是键
    >>> dict = {1:'one',2:'two'}
    >>> 1 in dict
    True
    >>> 'one' in dict
    False
    

    8. pop()和popitem()

    >>> a = {1:'one',2:'two',3:'three'}
    >>> a.pop(2)    #指定键,弹出值
    'two'
    >>> a
    {1: 'one', 3: 'three'}
    >>> a.popitem()    #因为字典的键值是无序的,所以会随机弹出一项
    (1, 'one')
    

    9. setdefault()与get()

    >>> a = {3: 'three'}
    >>> a.setdefault('abc')
    >>> a
    {3: 'three', 'abc': None}
    >>> a.setdefault(5,'five')
    'five'
    >>> a
    {3: 'three', 'abc': None, 5: 'five'}
    
    >>> a.get(10)    #一般情况下,字典索引一个不存在的键时会报错,而用get()不会
    >>> a
    {3: 'three', 'abc': None, 5: 'five'}
    >>> a.get(2,'two')
    'two'
    >>> a
    {3: 'three', 'abc': None, 5: 'five'}
    

    10. update()

    用字典或映射去更新另一个字典,类似list中的extend()。

    >>> b = {'我来':'更新'}
    >>> a.update(b)
    >>> a
    {3: 'three', 5: 'five', '我来': '更新', 'abc': None}
    

    相关文章

      网友评论

          本文标题:7 字典

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