1. 字典dict的定义

字典在Python中是一种可变的容器模型,是通过一组键值对(key-value)组成的。

这种结构类型通常也被称为映射,或关联数组,或哈系表。

字典中的每个键值对用 “  :”分割,每个键值对之间用 逗号 “  ,”分割,整个字典包括在花括号“{ }”中.

格式:d = {key1:value1, key2:value2, key3:value3} 

2. Python内置了字典,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。

    用python写一个dict如下:

>>> d = {'Bob': 95, 'Mary': 97}
>>> d['Mary']
    97

我们可以发现,如果用dict实现,只需要一个名字和成绩的对照表,就可以直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢。 

3. 为什么dict的查找速度这么快?

(1)因为dict的实现原理和查字典是一样的,以字典举例来说,我们在查某个字的时候,会先在字典的索引表里查到这个字对应的页码,然后直接翻到这页找到这个字。

         使用这样的方法,无论找哪个字,查找速度都会特别快,不会随着字典大小的增加而变慢。

(2)dict就是使用这样的方法来实现的,比如给定一个名字'Bob',dict就可以在内部直接算出'Bob'对应成绩的'页码',也就是存放成绩的内存地址,直接取出来,所以速度特别快。

         这种key-value的存储方式,在放进去的时候,必须根据key算出value的存放位置,这样取的时候才能根据key直接取出value。

4. 键的不可变性

键必须不可变,所以可以使用数字、字符串或者元组,但是就不可以用列表。

值可以取任意的数据类型。

如下实例所示:

>>> d = {['Name']: 'Zara', 'Age': 7} 

结果如下: 
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: unhashable type: 'list'

 5. 键的唯一性

键一般是唯一的,同一个键不允许出现两次。而如果重复最后的一个键值则会替换掉前面的,值不需要唯一。

由于1个key只能对应1个value,所以多次对1个key放入value,后面的值会把前面的值冲掉。

唯一性举例如下所示:

>>> dict = {'a': 1, 'b': 2, 'b': '3'}
>>> dict['b']
    '3'
>>> dict
    {'a': 1, 'b': '3'}

>>> dict = {'a': 1, 'b': 2}
>>> dict['b']
    '2'
>>> dict['b'] = 3
>>> dict
    {'a': 1, 'b': '3'}

 6. 数据放入dict的方法

1. 初始化指定
   d = {'Bob': 95, 'Mary': 97}
2. 通过key放入
   d['Adam'] = 67

3. dict内部存放的顺序和key放入的顺序是没有关系的

7. 修改dict的方法

#!/usr/bin/python
 
d = {'Name': 'Marsa', 'Age': 6, 'Class': 'First'}
 
d['Age'] = 18 # 更新
d['School'] = "USTB" # 添加
 
print("d['Age']: ", d['Age'])
print("d['School']: ", d['School'])


输出结果:
        d['Age']: 18
        d['School']: USTB

 8. key不存在,dict会报错

>>> d = {'Name': 'Marsa', 'Age': 6, 'Class': 'First'}

>>> d['Thomas']

    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'Thomas'

    避免key不存在这种错误的两种办法:

1. 通过in判断key是否存在
   >>> 'Thomas' in d
       
        False

2. 通过dict提供的get()方法
   如果key不存在,可以返回None或者自己指定的value。注意: 返回None的时候Python的交互环境不显示结果。
   >>> d.get('Thomas') 

   >>> d.get('Thomas', -1)
        
       -1

9. 在dict中删除一个key

删除字典中的元素,可以删除单一的元素,也能清空字典。
显示删除一个字典用del命令。

eg: d = {'Bob': 95, 'Mary': 97}

>>> del d['Bob'] # 删除键是'Bob'的条目,删除一个key,对应的value也会从dict中删除
>>> d.clear() # 清空字典中的所有条目
>>> del d # 删除字典

也可以使用pop(key)方法,删除一个key,对应的value也会从dict中删除
使用pop方法删除字典给定键key所对应的值,返回值为被删除的值

eg: d = {'Bob': 95, 'Mary': 97}

>>> d.pop('Bob')       
    95

>>> d
    {'Mary': 97}

10. dict和list的比较

dict的特点:

(1)查找和插入的速度极快,不会随着key的增加而变慢

(2)dict是用空间来换取时间的一种方法,需要占用大量的内存,内存浪费多

 

list的特点:

(1)查找和插入的速度随着元素的增多而变慢

(2)占用的空间比较小,内存浪费少

 

11. Python字典内置函数及方法