0.什么是字典?

  • 字典是一种存储键值对(K-V)的结构
    • 但是key不能重复
  • 以C/C++的视角看,就是map
  • 注意
    • 一个字典中的key的类型不一定都一样
      • 但是字典对于key是啥类型,有约束
    • 一个字典中的value的类型不一定都一样
      • 字典对于value是啥类型,没约束

1.创建字典

  • 创建一个空的字典,使用{}表示字典
    a = { }
    b = dict()
    print(type(a))
    print(type(b))
    
  • 可以在创建的同时指定初始值
    • 键值对之间使用,分割,
    • 键和值之间使用:分割
      student = { 'id': 1, 'name': 'SnowK' }
      
  • 为了代码更规范美观,在创建字典的时候往往会把多个键值对,分成多行来书写
    student = {
    	'id': 1,
    	'name': 'SnowK'
    }
    

2.查找key

  • 使用in可以判定key是否在字典中存在,返回布尔值
    student = {
        'id': 1,
        'name': 'zhangsan',
    }
    
    print('id' in student)
    
  • 使用[]通过类似于取下标的方式,获取到元素的值,只不过此处的"下标"是key
    • 如果key在字典中不存在, 则会抛出异常
      student = {
      	'id': 1,
      	'name': 'zhangsan',
      }
      
      print(student['id'])
      print(student['name'])
      
  • 总结
    • 对于字典来说,使用in或者[]来获取value,都是非常高效的操作
      • 哈希表
    • 对于列表来说,使用in比较低小,而是用[]比较高效
      • in:需要把整个列表遍历一遍
      • []:类似于数组/顺序表取下标

3.新增/修改元素

  • 使用[]可以根据key来新增/修改value
    • 如果key不存在,对取下标操作赋值,即:新增键值对
      student = {
          'id': 1,
          'name': 'zhangsan',
      }
      
      student['score'] = 90
      
    • 如果key已经存在,对取下标操作赋值,即:修改键值对的值
      student = {
          'id': 1,
          'name': 'zhangsan',
          'score': 80
      }
      
      student['score'] = 90
      

4.删除元素

  • 使用pop()方法根据key删除对应的键值对
    student = {
        'id': 1,
        'name': 'zhangsan',
        'score': 80
    }
    
    student.pop('score')
    

5.遍历字典元素

  • Python能够保证遍历出来的顺序,就是和插入的顺序是一致的
    • 这一点和C++中的map / unordered_map不同
  • 直接使用for循环,就能够获取到字典中的所有的key,进一步的就可以取出每个值了
    student = {
        'id': 1,
        'name': 'zhangsan',
        'score': 80
    }
    
    for key in student:
        print(key, student[key])
    

6.取出所有 key 和 value

  • 使用keys()可以获取到字典中的所有的key
    • 返回类型是dict_keys,可以当作一个列表来使用
      student = {
          'id': 1,
          'name': 'zhangsan',
          'score': 80
      }
      
      print(student.keys())
      
  • 使用values()可以获取到字典中的所有value
    • 返回类型是dict_values,可以当作一个列表来使用
      student = {
          'id': 1,
          'name': 'zhangsan',
          'score': 80
      }
      
      print(student.values())
      
  • 使用items()可以获取到字典中所有的键值对
    • 返回类型是dict_items,是一个列表一样的结构,里面每个元素都是一个元组,元组里面包含了键值对
      student = {
          'id': 1,
          'name': 'zhangsan',
          'score': 80
      }
      
      print(student.items())
      
      for key, value in student.items():
      	print(key, value)
      

7.合法的key类型

  • 不是所有的类型都可以作为字典的key
  • 字典本质上是一个哈希表,哈希表的key要求是"可哈希的",也就是可以计算出一个哈希值
    • 可以使用hash()计算某个对象的哈希值
    • 但凡能够计算出哈希值的类型,都可以作为字典的key
      • 不可变对象,一般就是可哈希的
      • 可变的对象,一般就是不可哈希的
  • 列表和字典无法计算哈希值
Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐