一、字典的初识

  • 为什么要有字典
    字典与列表同属容器型数据类型,同样可以存储大量的数据,但是,列表的数据关联性不强,并且查询速度比较慢,只能按照顺序存储。
  • 什么是字典
    • 先说一下什么叫可变与不可变的数据类型分类

      • 不可变(可哈希)数据类型:int, str, bool, tuple。
      • 可变(不可哈希)数据类型:list, dict, set。
    • 字典是Python语言中的映射类型,他是以{}括起来,里面的内容是以键值对的形式储存的

      • 字典的基本格式
        dic = {'Dylan': {'name':'Dylan', 'age': 18, 'sex':'男'}, 'city':['beijing', 'qingdao', 'jiangsu'] } # 这是一个嵌套的字典
      • Key(键):不可变(可哈希)的数据类型,并且键是唯一的,不重复的。
      • value(值):任意数据类型(int, str, bool, tuple, list, dict, set),包括后面要学的实例对象等等。
      • 字典在3.5x版本之前(包括3.5)是无序的。
      • 字典在3.6x会按照次建立字典的顺序排列,学术上不认为是有序的。
      • 字典在3.7x 以后都是有序的了。
      • 字典的优点:查询速度非常快,存储关联性的数据。
      • 字典的缺点:以空间换时间。也就是说,它的内存消耗非常大。
  • 字典的创建
    # 面试会考 # 方式一: dic = dict((('one', 1), ('two', 2), ('three', 3))) print(dic) # {'one': 1, 'two': 2, 'three': 3} # 方式二: dic = dict(one=1, two=2, three=3) print(dic) # {'one': 1, 'two': 2, 'three': 3} # 方式三: dic = dict({'one': 1, 'two': 2, 'three': 3}) print(dic) # {'one': 1, 'two': 2, 'three': 3}
  • 字典的合法性
    # 合法 dic = {123: 456, True: 999, "id": 1, "name": 'sylar', "age": 18, "stu": ['帅哥', '美⼥'], (1, 2, 3): '麻花藤'} print(dic[123]) # 456 print(dic[True]) # 999 print(dic['id']) # 1 print(dic['stu']) # ['帅哥', '美⼥'] print(dic[(1, 2, 3)]) # 麻花藤 # 不合法 dic = {[1, 2, 3]: '周杰伦'} # list是可变的. 不能作为key dic = {{1: 2}: "哈哈哈"} # dict是可变的. 不能作为key dic = {{1, 2, 3}: '呵呵呵'} # set是可变的, 不能作为key

二、字典的增、删、改、查

  • 字典的增

    • 直接增加 有则改之,无则增加
      dic = {'name': 'Dylan', 'age': 18, 'hobby_list': ['IT', '妹子', '旅行']} dic['sex'] = '男' # 原字典里没有这个键值对,所以会新增加这个键值对。 dic['age'] = 22 # 原字典里己经有这个键了,所以会更改原字典这个键的值。 print(dic) # {'name': 'Dylan', 'age': 22, 'hobby_list': ['IT', '妹子', '旅行'], 'sex': '男'}
    • dic.setdefault('键','值') 有则不变,无则增加
      dic = {'name': 'Dylan', 'age': 18, 'hobby_list': ['IT', '妹子', '旅行']} dic.setdefault('hobby') # 新增一个键,值为空(None) dic.setdefault('hobby', '汽车') # 这条是要给 hobby 加个值,但是,上一条己经创建了一个同样的键,所以。这一行的值是不能加进去的,可以用改的方法,改变原来的空值为这一条的值。 dic.setdefault('age', 33) # 这条跟上一条同理,原字典中己有的键值不会被增加修改。 print(dic) # {'name': 'Dylan', 'age': 18, 'hobby_list': ['IT', '妹子', '旅行'], 'hobby': None}
  • 字典的删

    • dic.pop('键','第二个参数值')
      # pop 按照键删除键值对, 有返回值 *** # 设置第二个参数则无论字典中有无此键都不会报错 dic = {'name': 'Dylan', 'age': 18, 'hobby_list': ['IT', '妹子', '旅行']} dic.pop('name') # 这是 pop 的基本用法 ret = dic.pop('name') # 删除字典中 name 键 和 Dylan 值,并将删除的值赋值给 ret,但是,由于上一条中己经执行了一次删除 name,这一条找不到原字典中的 name 键,所以.程序会报错.如下: ### Traceback (most recent call last): File "/Users/yaoyaoba/Full_stack_22/day04/练习.py", line 145, in <module> ret = dic.pop('name') KeyError: 'name' ### ret1 = dic.pop('hobby','没有此键') # 为了避免报错,通常我们会再加上一个返回参数,可以自定义.格式如些条. print(ret) # Dylan print(ret1) # 没有此键 print(dic) # {'age': 18, 'hobby_list': ['IT', '妹子', '旅行']}
    • dic.clear() 清空
      dic = {'name': 'Dylan', 'age': 18, 'hobby_list': ['IT', '妹子', '旅行']} dic.clear() # 清空字典内的键值对,并留下一个空字典。 print(dic) # {}
    • del 删除字典中的某个键值对/或者删除整个字典
      dic = {'name': 'Dylan', 'age': 18, 'hobby_list': ['IT', '妹子', '旅行']} del dic['age'] print(dic) del dic['name1'] # 如果要删除的键没有在字典中,则会报错,所以一般不用这个方法删除键值对。 ### Traceback (most recent call last): File "/Users/yaoyaoba/Full_stack_22/day04/练习.py", line 143, in <module> del dic[name1] NameError: name 'name1' is not defined ### del dic # 将整个字典删掉 print(dic) # 打印会报错 ### Traceback (most recent call last): File "/Users/yaoyaoba/Full_stack_22/day04/练习.py", line 144, in <module> print(dic) NameError: name 'dic' is not defined ###
  • 字典的改
    • 直接改
      dic = {'name': 'Dylan', 'age': 18, 'hobby_list': ['IT', '妹子', '旅行']} dic['age'] = 33 # 将字典中'age'键的值改为'33' print(dic)
  • 字典的查

    • 通过键查询
      dic = {'name': 'Dylan', 'age': 18, 'hobby_list': ['IT', '妹子', '旅行']} print(dic['name']) # Dylan # 如果所查的键没在字典里,会报错。 print(dic['name2']) ### Traceback (most recent call last): File "/Users/yaoyaoba/Full_stack_22/day04/练习.py", line 143, in <module> print(dic['name2']) # Dylan KeyError: 'name2' ###
    • dic.get('键') 查询并返回一个结果,可以赋值给变量
      dic = {'name': 'Dylan', 'age': 18, 'hobby_list': ['IT', '妹子', '旅行']} v = dic.get('name') print(v) # Dylan v = dic.get('name1') print(v) # None (如果字典中没有这个键,将返回一个空值,避免报错) v = dic.get('name2', '没有此键') # 如果字典中没有这个键值对,可以自定义一个反回的值。 print(v) # 没有此键
  • 字典的三个特殊用法
    • dic.keys() 查找字典中所有的键
      dic = {'name': 'Dylan', 'age': 18, 'hobby_list': ['IT', '妹子', '旅行']} print(dic.keys(), type(dic.keys())) # dict_keys(['name', 'age', 'hobby_list']) <class 'dict_keys'> # 可以转化为列表 print(list(dic.keys())) # ['name', 'age', 'hobby_list'] for key in dic.keys(): print(key) # 打印字典中每个键 for key in dic: print(key) # 打印字典中每个键(等价于上面的方法)
    • dic.values() 查找字典中所有的值
      dic = {'name': 'Dylan', 'age': 18, 'hobby_list': ['IT', '妹子', '旅行']} print(dic.values()) # dict_values(['Dylan', 18, ['IT', '妹子', '旅行']]) print(list(dic.values())) # ['Dylan', 18, ['IT', '妹子', '旅行']] for value in dic.values(): print(value) # 打印字典中每个值
    • dic.items() 查找字典中所有的键和值 (以字典包裹元组的形式)
      dic = {'name': 'Dylan', 'age': 18, 'hobby_list': ['IT', '妹子', '旅行']} print(dic.items()) # dict_items([('name', 'Dylan'), ('age', 18), ('hobby_list', ['IT', '妹子', '旅行'])]) for key,value in dic.items(): print('键:', key, '值:' , value) # 打印结果: 键: name 值: Dylan 键: age 值: 18 键: hobby_list 值: ['IT', '妹子', '旅行'] # 这里涉及到一个分别赋值的问题: 面试题: a = 18 b = 12 a, b = b, a # 等价于 a, b = 12, 18 print(a, b)

三、字典的嵌套
​ 字典的嵌套是非常重要的知识点,这个必须要建立在熟练使用字典的增删改查的基础上,而且字典的嵌套才是咱们在工作中经常会遇到的字典,工作中遇到的字典不是简简单单一层,而就像是葱头一样,一层接一层,但一般都是很有规律的嵌套,那么接下来我们就学习一下字典的嵌套:
dic = { 'name':'汪峰', 'age':48, 'wife':[{'name':'国际章','age':38}], 'children':{'girl_first':'小苹果','girl_second':'小怡','girl_three':'顶顶'} } 1. 获取汪峰的名字。 2.获取这个字典:{'name':'国际章','age':38}。 3. 获取汪峰妻子的名字。 4. 获取汪峰的第三个孩子名字。 # 解题思路: # 1.获取汪峰的名字。: 这个比较简单,汪峰就是dic的一个键对应的值,我们通过这个key就可以获取到汪峰这个值。 name = dic['name'] print(name) # 汪峰 # 2. 获取这个字典{'name':'国际章','age':38}: 想要获取这个字典,先要看字典从属于谁?这个字典从属于一个列表,而这个列表是字典wife对应的键,所以咱们应该先通过wife获取到对应的这个列表,然后通过这个列表按照所以取值取到对应的这个字典。 l1 = dic['wife'] # 先获取到这个列表 di = l1[0] # 列表按照索引取值,这个字典是列表的第一个元素,所以通过索引获取到这个字典 print(di) # {'name': '国际章', 'age': 38} # 3. 获取汪峰的妻子名字: 还是按照上一题的思路:想要获取汪峰妻子的名字:国际章,那么他是一个字典的键对应的值,所以我们通过'name'这个键就可以获取到对应的值,这个题的难点是获取到这个小字典,而上一个题我们已经获取了这个小字典,所以在上面的基础上再执行就可以了。 di = dic['wife'][0] # 这个是上一次题获取的小字典的代码 wife_name= di['name'] # 通过小字典然后再通过键就能获取到对应的值 print(wife_name) # 国际章 # 当然咱们可以简化: wife_name = dic['wife'][0]['name'] print(wife_name) # 国际章 # 4.获取汪峰的第三个孩子名字: 汪峰的孩子们是在一个字典中的,你要想获取汪峰的第三个孩子,你应该先获取到它从属于的这个字典,然后再通过这个字典获取第三个孩子的名字。 dic2 = dic['children'] # 先获取这个字典 name = dic2['girl_three'] # 在通过这个字典获取第三个孩子的名字 print(name) # 顶顶 # 当然你可以简化: name = dic['children']['girl_three'] print(name) # 顶顶

最后,小编想说:我是一名python开发工程师,整理了一套最新的python系统学习教程,想要这些资料的可以关注私信小编“01”即可,希望能对你有所帮助。

python列表嵌套字典取值_我的 python 学习历程-Day05 字典/字典的嵌套相关推荐

  1. 27. Python 列表的索引取值

    27. 列表的索引取值 文章目录 27. 列表的索引取值 1. 列表的索引 2. 列表索引取值 3. 列表的正索引取值 4. 列表的负索引取值 5. 用列表本身取值 6. 从嵌套列表中取值 7. 课后 ...

  2. 28. Python 列表的切片取值

    28. 列表的切片取值 文章目录 28. 列表的切片取值 1. 列表的切片 2. 切片的语法 3. 切片取值示例 3.1 步长为1的切片取值 3.2 步长为3的切片取值 3.3 负索引取值 1. 列表 ...

  3. python 字典取值加引号创建一个对象_Python在添加到字典时从列表项中删除单引号...

    我试过类似帖子中的所有推荐,但都没有成功.我有一个用于为字典列表创建值的项列表.该列表最终将成为一个JSON对象,因此我不能在添加到其中的每个列表项周围使用单引号.在metrics = [" ...

  4. python 列表间隔取值_程序从Python中的间隔列表中查找最长间隔的长度

    假设我们有一个间隔列表,其中每个间隔的格式为[start,end].我们必须找到可以合并任意数量的重叠间隔的最长间隔. 因此,如果输入类似于[[1,6],[4,9],[5,6],[11,14],[16 ...

  5. 列表根据下标取值_散列表(上):Word文档中的单词拼写检查功能是如何实现的?...

    Word这种文本编辑器你平时应该经常用吧,那你有没有留意过它的拼写检查功能呢?一旦我们在Word里输入一个错误的英文单词,它就会用标红的方式提示"拼写错误".Word的这个单词拼写 ...

  6. python删除列表中的重复值_如何从 Python 列表中删除重复项

    例子解释 创建一个以 List 作为参数的函数. 创建函数 def my_function(x): return list(dict.fromkeys(x)) mylist = my_function ...

  7. python表达式3and not5的值_太原理工大学python考试题总结

    已知x = [1, 2, 3],那么x*3的值为 [1, 2, 3, 1, 2, 3, 1, 2, 3] 已知x = [1, 2]和y = [3, 4],那么x+y的结果是 [1, 2, 3, 4] ...

  8. python列表有固定大小吗_如何在python中创建固定大小的列表?

    (tl:dr:对您的问题的确切答案是numpy.empty或numpy.empty_like,但是您可能不在乎,可以使用myList = [None]*10000.) 简单方法 您可以将列表初始化为所 ...

  9. python列表输入数字逗号隔开_第一行Python代码之我的第一个Project(3)

    EMS项目之dict字典结构 文章目录 dict字典介绍 字典输出 更新字典值 删除字典和字典元素 tuple数据类型 数据结构总结 dict字典介绍 字典是另一种可变容器模型,且可存储任意类型对象. ...

最新文章

  1. python编程语言能干什么-这 13个,1 行Python代码能干哪些事?
  2. sql 中的导航函数 FIRST_VALUE, LAST_VALUE
  3. 混合云存储开启企业上云新路径--阿里云混合云备份容灾方案发布 1
  4. 不实用额外变量 交换_变量交换:巧用异或运算
  5. Succinctly 中文系列教程 20220109 更新
  6. 特征图注意力_ICLR2017 | AT_注意力引导的知识蒸馏
  7. ES6学习(五)—数组的扩展
  8. 升级win10遇到的一些问题
  9. wordpress静态文件加速,整合CDN
  10. Django根据现有数据库建立/更新model
  11. 如何借助表格优化直通车分时折扣
  12. 考研数据库复习(一) 过一遍教材
  13. 7-1 设计一个风扇Fan类 (20 分)JAVA PTA
  14. 如何以活动价在官网购买百度网盘会员
  15. MySQl排序,别名
  16. Dedecms QQ一键登录插件
  17. CF498D Traffic Jams in the Land
  18. 【产业互联网周报】AI独角兽们集体亮相安博会,侧重点各不相同;BAT智慧城市布局进一步加深...
  19. error C1083:无法打开文件stddef.h或crtd bg.h
  20. Ruby on Rails 实践:优化rvm安装、下载速度

热门文章

  1. 小程序 pagescrollto_微信小程序学习笔记(三)-- 首页及详情页开发
  2. Halcon算子学习:sample_object_model_3d
  3. python连接mysql的一些基础知识+安装Navicat可视化数据库+flask_sqlalchemy写数据库
  4. pycharm远程连接服务器(docker)调试+ssh连接多次报错
  5. 以LeNet-5为例理解CNN
  6. PyQt5 快速开发 与 实战
  7. Java8 Stream详解~聚合(max/min/count)
  8. Java加密与解密的艺术~思维导图
  9. 硬件安全 (1) —— SHA-1算法在FPGA上的实现
  10. C++学习之路 | PTA乙级—— 1018 锤子剪刀布 (20分)(精简)