dict

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

  1. ####################### 声明 #################################
  2. # 声明一个 dict
  3. table = {'name':'zhangsan','age':18}
  4. ####################### 查询 #################################
  5. # 通过 key 查询 value:key 不存在时报错
  6. table['name']
  7. # 如果不确定dict中是否存在某key,有如下两种方法:
  8. # 1.使用 in 关键字进行判断
  9. 'salary' in table # 返回 True
  10. # 2.使用 dict 提供的get()方法
  11. table.get('salary') # key不存在时返回 None,None在python交互环境中不显示结果
  12. table.get('salary', -1) # key不存在时返回-1,即自定义返回值
  13. ####################### 插入 #################################
  14. # 插入元素
  15. table['salary'] = 3600
  16. ####################### 更新 #################################
  17. # 更新元素:相同 key 的赋值会进行更新
  18. table['salary'] = 6000
  19. ####################### 删除 #################################
  20. # 删除一个 key,传入的 key 必须在dict中,否则报错
  21. table.pop('salary')

注意事项:

  1. dict 的 key 必须为不可变对象,如字符串、整数等
  2. dict 底层使用的是哈希表
  3. 元组虽然是不可变对象,但是当元组中存在可变对象如 list 时,由于 list 为可变元素,不支持 hash 方法,因此会抛出异常
    1. >>> table[(1,2,[2,3])] = 2
    2. Traceback (most recent call last):
    3. File "<pyshell#13>", line 1, in <module>
    4. table[(1,2,[2,3])] = 2
    5. TypeError: unhashable type: 'list'

dict 与 list 比较

dict:用空间换时间

  1. 查找和插入的速度极快,不会随着key的增加而变慢
  2. 需要占用大量的内存,内存浪费多

list:

  1. 查找和插入的时间随着元素的增加而增加
  2. 占用空间小,浪费内存很少


set

set 类似于 dict,也是一组 key 的集合,但不存储 value,且不允许有重复元素,因此不支持存放可变元素

  1. ####################### 创建set #################################
  2. # 通过 list 创建 set:集合中的重复元素会被过滤
  3. s = set([1,2,3])
  4. # 直接创建
  5. s = {1,2,3}
  6. ####################### 往set中添加元素 #################################
  7. # add(key):添加重复元素不会报错,但不会修改集合
  8. s.add(4)
  9. ####################### 删除set中的元素 #################################
  10. # remove(key)
  11. s.remove(2)
  12. ####################### set运算 #################################
  13. # &:交集
  14. # |:并集

不可变对象

在 python 中,字符串 str、元组 tuple、整数都是不可变对象,而 list 属于可变对象。

  • 对于可变对象,如list,对其进行操作,list 内部的内容会发生变化
  • 对于不可变对象,如 str,对 str 进行操作时,如 str.replace() 方法,其不是直接改变了 str ,而是改变了变量的引用