字典的初识

  • why:
    • 列表可以存储大量的数据,但数据之间的关联性不强
    • 列表的查询速度比较慢。数量越大查询越慢
  • what:容器型数据类型:dict
  • how:
    • 数据类型的分类(可变与不可变)

      • 可变(不可哈希)的数据类型:list dict set 
      • 不可变(可哈吉)的数据类型:str bool int tuple (对原对象本身不可变) 
    • 字典:{}括起来,以键值对形式存储的容器型数据类型:
      dic = {
      '小明':
      {'name': '小明', 'age': 18, 'sex': '男'},
      '名单':
      ['小红', '小猪', '小严']
      }
    • 键必须是不可变的数据类型:int,str, bool tuple(唯一的)不然后一个就会把前一个给覆盖

      dic = {1: 'a', 1: 'b', 2: 'c'}
      print(dic) # {1: 'b', 2: 'c'}
    • 值可以是任意数据类型,对象。

    • 字典3.5版本之前包括3.5是 无序的。

    • 字典在3.6会按照初次建立字典的顺序排列,学术上不认为是有序的。
    • 字典在3.7以后都是有序的。
    • 字典的优点:查询速度非常快,存储关联性的数据
    • 字典的缺点:以空间换时间。
  • 字典的创建方式:面试题说出创建字典的方法
    • 方式一:

      dic = dict((('one', 1), ('tow', 2), ('stree', 3)))
      print(dic) # {'one': 1, 'tow': 2, 'stree': 3}
    • 方式二:
      dic = dict(noe=1, tow=2, three=3)
      print(dic) # {'noe': 1, 'tow': 2, 'three': 3}
    • 方式三:最正规的方式(官方)
      dic = dict({'noe': 1, 'tow': 2, 'three': 3})
      print(dic) # {'noe': 1, 'tow': 2, 'three': 3}
  • 字典的合法性,键必须是不可变的
    dic = {[1, 2]: 'ab', 1: 19}
    print(dic) dic = {[1, 2]: 'ab', 1: 19}
    TypeError: unhashable type: 'list'

字典的使用(增删改查)

  • 增:

    • 直接增加,有则改之,无则增加

      dic = {'name': '小明', 'age': 18}
      
      dic['sex'] = '男'  # {'name': '小明', 'age': 18, 'sex': '男'}
      dic['age'] = 23 # {'name': '小明', 'age': 23}
    • setdefault: 有则不变,无则增加
      dic = {'name': '小明', 'age': 18}
      
      dic.setdefault('age', 45)  # {'name': '小明', 'age': 18}
      dic.setdefault('set', '男') # {'name': '小明', 'age': 18, 'sex': '男'
  • 删除
    • pop:按照键值去删除键值对,返回对应的值,并且将字典当中的键值对删除

      dic = {'name': '小明', 'age': 18}
      
      dic.pop('age')  # 字典删除后为{'name': '小明'} 并返回18
      dic.pop('sex') # 没有此键就会报错
      dic.pop('sex', '没有此键') # 设置第二个参数,无论字典中是否有此键值,返回第二个参数的内容
    • clear:清空,内容清空
    • del:和pop一样但没有就报错,没有第二个参数,建议用pop
    • 直接改:

      dic = {'name': '小明', 'age': 18}
      dic['age'] = 55
      print(dic) # {'name': '小明', 'age': 55}
    • get()

      dic = {'name': '小明', 'age': 18}
      
      ll = dic.get('age')  # 返回查询的值
      ls = dic.get('sex', '没有此键') # 设置第二个参数,字典中没有此键值,返回第二个参数的内容
      print(ll) # 18
      print(ls) # 没有此键
    • keys() values() items() 三个特殊的
      dic = {'name': '小明', 'age': 18}
      
      print(dic.keys())  #  dict_keys(['name', 'age'])
      list(dic.keys()) # 转换成一个列表
    • values() 和keys一致,加载所以的键放在一个特殊的数字类型里去,可以转化成列表,也可以直接for循环
    • items()以元组的形式返回所有的键值对,可for循环遍历
      dic = {'name': '小明', 'age': 18}
      
      print(dic.items())  # dict_items([('name', '小明'), ('age', 18)])
      #----------------------------------------- # 使用元组的拆包 for i in dic.items():
      print(i) ('name', '小明')
      ('age', 18)
      #---------------------------------------------
      for key, value in dic.items():
      print(key, value) name 小明
      age 18
  • 相关题:
    a = 11
    b = 19
    # 解:
    a, b = b, a # 19, 11

字典的嵌套

dic = {
'name': '汪峰',
'age': 48,
'wife': [{'name': '国际章', 'age': 38}, ],
'children': {'girl_first': '小苹果', 'girl_second': '小怡', 'girl_three': '顶顶'}
} # 1. 获取汪峰的名字。
ll = dic.get('name')
print(ll) # 汪峰
# 2.获取这个字典:{'name':'国际章','age':38}。
ll = dic.get('wife')[0]
print(ll) # {'name': '国际章', 'age': 38}
# 3. 获取汪峰妻子的名字。
ll = dic.get('wife')[0].get('name')
print(ll) # 国际章
# 4. 获取汪峰的第三个孩子名字。
ll = dic.get('children').get('girl_three')
print(ll) # 顶顶

总结

字典:查询速度快,数据关联性强

  • 键不可变的数据类型(str int),唯一

  • 值:任意数据类型,对象

  • 增删改查

  • 字典的嵌套

最新文章

  1. Delphi容器类之---Tlist,TStringlist,THashedStringlist的效率比较
  2. c# 局域网文件传输实例
  3. vue2.0 开发实践总结之入门篇
  4. SonarQube-5.6.3 代码分析平台搭建使用
  5. 2.5---链表来进行加法,链式A+B(CC150)
  6. GO語言基礎教程:數據類型,變量,常量
  7. Protocol Buffers动态消息解析
  8. 提高eclipse使用效率(二) 提高Android开发效率的小技巧
  9. 使用goldengate交付指定时间前的数据
  10. [转] POJ 题目分类
  11. SRM593(1-250pt,500pt)
  12. 10.使用final关键字修饰一个变量时...
  13. 柯南君:看大数据时代下的IT架构(9)消息队列之RabbitMQ--案例(RPC起航)
  14. Markdown例
  15. Spring依赖注入原理
  16. 2018-2019-2 网络对抗技术 20165337 Exp3 免杀原理与实践
  17. spring MVC 如何接收前台传入的JSON对象数组并处理
  18. 关于网站中引用COM组件的部署问题
  19. ubuntu 14.04 sudo apt-get 简单 安装 ffmpeg
  20. 《linux就该这么学》找到一本不错的Linux电子书,《Linux就该这么学》。

热门文章

  1. Nestjs 修改dist目录
  2. c++ 去掉字符串首尾空格
  3. 黑马来袭!NGK生态所二月上线!
  4. NGK:APP一站式挖矿高收益项目
  5. CSS中Position属性static、absolute、fixed、relative
  6. js获取数字数组最大值的几种方式
  7. docker数据卷的操作
  8. 又长又细,万字长文带你解读Redisson分布式锁的源码
  9. mysql主从复制,主主复制,级联复制,半同步复制
  10. 绿色城市之地下综合管廊3D可视化平台