字典(17)

作者: 程序员夏天 | 来源:发表于2020-02-21 19:42 被阅读0次

    Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查取和插入速度。

    字典包含的元素个数不限,值的类型可以是任何数据类型!但是字典的key必须是不可变的对象,例如整数、字符串、bytes和元组,最常见的还是将字符串作为key。列表、字典、集合等就不可以作为key。同时,同一个字典内的key必须是唯一的,但值则不必。

    注意:从Python3.6开始,字典是有序的!它将保持元素插入时的先后顺序!请务必清楚!

    字典可精确描述为不定长、可变、散列的集合类型。字典元素在内存中的存储方式是不连续的,也没有链接关系,所以千万不要用列表的序列性质来套字典的性质。

    字典的每个键值对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,例如:

    d = {key1 : value1, key2 : value2 }

    1. 创建字典

    dict()函数是Python内置的创建字典的方法。

    dic = {}    # 创建空字典
    dic = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
    
    >>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
    {'sape': 4139, 'jack': 4098, 'guido': 4127}
    
    >>> dict(sape=4139, guido=4127, jack=4098)
    {'sape': 4139, 'jack': 4098, 'guido': 4127}
    

    2. 访问字典

    虽然现在的字典在访问时有序了,但字典依然是集合类型,不是序列类型,因此没有索引下标的概念,更没有切片的说法。但与list类似的地方是,字典采用把相应的键放入方括号内获取对应值的方式取值。

    dic = {'Name': 'Jack','Age': 7, 'Class': 'First'}
    
    print ("dic['Name']: ", dic['Name'])
    print ("dic['Age']: ", dic['Age'])
    

    如果访问字典里没有的键,会抛出异常:

    >>> dic = {'Name': 'Jack','Age': 7, 'Class': 'First'}
    >>> dic["address"]
    Traceback (most recent call last):
      File "<pyshell#7>", line 1, in <module>
        dic["address"]
    KeyError: 'address'
    

    3. 增加和修改

    增加就是往字典插入新的键值对,修改就是给原有的键赋予新的值。由于一个key只能对应一个值,所以,多次对一个key赋值,后面的值会把前面的值冲掉。

    >>> dic = {'Name': 'Jack','Age': 7, 'Class': 'First'}
    >>> dic["address"] = "Shanghai"
    >>> dic["address"] = "Beijing"
    >>> dic["Age"] = 18
    >>> dic
    {'Name': 'Jack', 'Age': 18, 'Class': 'First', 'address': 'Beijing'}
    

    要统计字典内键的个数,可以使用Python内置的len()函数:

    >>> dic
    {'Name': 'Jack', 'Age': 18, 'Class': 'First', 'address': 'Beijing'}
    >>> len(dic)
    4
    

    4. 删除字典元素、清空字典和删除字典

    使用del关键字删除字典元素或者字典本身,使用字典的clear()方法清空字典。

    >>> dic
    {'Name': 'Jack', 'Age': '20', 'Class': 'First', 'sex': 'male'}
    >>> del dic['Name']     # 删除指定的键
    >>> dic
    {'Age': '20', 'Class': 'First', 'sex': 'male'}
    >>> a = dic.pop('Class')        # 弹出并返回指定的键。必须提供参数!
    >>> a
    'First'
    >>> dic
    {'Name': 'Jack', 'Age': 7}
    >>> dic.clear()         # 清空字典
    >>> dic
    {}
    >>> del dic         # 删除字典本身
    >>> dic
    Traceback (most recent call last):
      File "<pyshell#20>", line 1, in <module>
        dic
    NameError: name 'dic' is not defined
    

    5. 字典的重要方法

    下表中列出了字典的重要内置方法。其中的get、items、keys和values是核心中的核心,必须熟练掌握!

    我们来看一些例子:

    >>> dic = {'Name': 'Jack', 'Age': 7, 'Class': 'First'}
    >>> dic.get('sex')  # 访问不存在的key,没有报错,但是IDLE不会显示None
    >>> dic['sex']      # 报错
    Traceback (most recent call last):
      File "<pyshell#44>", line 1, in <module>
        dic["sex"]
    KeyError: 'sex'
    >>> dic.items()
    dict_items([('Name', 'Jack'), ('Age', 7), ('Class', 'First')])
    >>> dic.values()
    dict_values(['Jack', 7, 'First'])
    >>> dic.keys()
    dict_keys(['Name', 'Age', 'Class'])
    >>> dic.pop("Name")
    'Jack'
    >>> dic
    {'Age': 18, 'Class': 'First', 'address': 'Beijing'}
    >>> dic.popitem()
    ('address', 'Beijing')
    >>> dic
    {'Age': 18, 'Class': 'First'}
    

    6. 遍历字典

    从Python3.6开始遍历字典获得的键值对是有序的!以下的遍历方法必须全部熟练掌握。

    dic = {'Name': 'Jack', 'Age': 7, 'Class': 'First'}
    
    # 1  直接遍历字典获取键,根据键取值
    for key in dic:
        print(key, dic[key])
    
    # 2  利用items方法获取键值,速度很慢,少用!
    for key,value in dic.items():
        print(key,value)
    
    #3  利用keys方法获取键
    for key in dic.keys():
        print(key, dic[key])
    
    #4  利用values方法获取值,但无法获取对应的键。
    for value in dic.values():
        print(value)
    

    7. 综合展示

    看下面的例子,其中有一些是错误做法展示:

    >>> dic = {}
    >>> for i in 'adilwste':
        dic[i] = ord(i)
    >>> dic
    {'a': 97, 'd': 100, 'i': 105, 'l': 108, 'w': 119, 's': 115, 't': 116, 'e': 101}
    >>> dic
    {'a': 97, 'd': 100, 'i': 105, 'l': 108, 'w': 119, 's': 115, 't': 116, 'e': 101}
    >>> dic
    {'a': 97, 'd': 100, 'i': 105, 'l': 108, 'w': 119, 's': 115, 't': 116, 'e': 101}
    >>> dic
    {'a': 97, 'd': 100, 'i': 105, 'l': 108, 'w': 119, 's': 115, 't': 116, 'e': 101}
    >>> dic
    {'a': 97, 'd': 100, 'i': 105, 'l': 108, 'w': 119, 's': 115, 't': 116, 'e': 101}
    >>> for i in dic:
        print(i,dic[i])
    
    a 97
    d 100
    i 105
    l 108
    w 119
    s 115
    t 116
    e 101
    >>> dic[0]
    Traceback (most recent call last):
      File "<pyshell#14>", line 1, in <module>
        dic[0]
    KeyError: 0
    >>> dic.pop()
    Traceback (most recent call last):
      File "<pyshell#15>", line 1, in <module>
        dic.pop()
    TypeError: pop expected at least 1 arguments, got 0
    >>> dic.popitem()
    ('e', 101)
    >>> dic.popitem()
    ('t', 116)
    >>> dic.popitem()
    ('s', 115)
    >>> dic
    {'a': 97, 'd': 100, 'i': 105, 'l': 108, 'w': 119}
    >>> dic.popitem('d')
    Traceback (most recent call last):
      File "<pyshell#20>", line 1, in <module>
        dic.popitem('d')
    TypeError: popitem() takes no arguments (1 given)
    >>> a = dic.popitem()
    >>> a
    ('w', 119)
    

    上一篇:字符串

    下一篇:bytes

    相关文章

      网友评论

        本文标题:字典(17)

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