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

5cfacdb89f5250f3a06833a8a098f8db.png

一、字典的初识

  • 为什么要有字典
    字典与列表同属容器型数据类型,同样可以存储大量的数据,但是,列表的数据关联性不强,并且查询速度比较慢,只能按照顺序存储。
  • 什么是字典
    • 先说一下什么叫可变与不可变的数据类型分类
      • 不可变(可哈希)数据类型: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”即可,希望能对你有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505115.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

s8050三极管经典电路_曝光一个产品级的红外发射电路

作者&#xff1a;瑞生&#xff0c;来源&#xff1a;科技老顽童微信公众号&#xff1a;芯片之家(ID&#xff1a;chiphome-dy今天给大家一个产品级的红外发射电路。为什么说是产品级的&#xff1f;因为这个电路我已经在各类产品上见过多次&#xff01;很多小伙伴学电子有一个误区…

es6删除数组某一项_精学手撕系列——数组扁平化

参考文章&#xff1a;面试官连环追问&#xff1a;数组拍平(扁平化) flat 方法实现编者荐语&#xff1a;在前端面试中&#xff0c;手写flat是非常基础的面试题&#xff0c;通常出现在笔试或者第一轮面试中&#xff0c;主要考察面试者基本的手写代码能力和JavaScript的基本功。今…

iqc工作职责和工作内容_监理工程师工作职责

1&#xff0e;安全监理员是项目安全生产日常监理工作的主要实施者&#xff0c;代表总监理工程师在项目工程监理过程中行使项目安全生产监理的职责。2&#xff0e;安全监理员应认真贯彻执行《建设工程安全生产管理条例》&#xff0c;贯彻执行劳动保护、安全生产的方针政策、法令…

webservice 实现与his系统对接_[Share] EDI 及其他常见系统对接技术

近期&#xff0c;有客户提及&#xff1a;你们有没有对接技术相关的介绍&#xff0c;不同系统之间的对接技术&#xff0c;现在企业内部系统比较多&#xff0c;有自主开发的&#xff0c;有外部采购的&#xff0c;所以我们想了解一下对接技术相关的信息。小知马不停蹄的做了下功课…

php弱类型漏洞,php代码审计之弱类型引发的灾难

天融信阿尔法实验室 李喆有人说php是世界上最好的语言&#xff0c;这可能是对开发人员来说&#xff0c;确实有这方面的特点&#xff0c;因为它开发起来不像其他语言那样麻烦&#xff0c;就比如&#xff1a;弱类型&#xff0c;它不需要像java等语言那样明确定义数据类型。这给开…

大学计算机基础python第二次作业_第二次python作业-titanic数据练习

原博文 2019-10-14 14:45 − 一、读入titanic.xlsx文件&#xff0c;按照教材示例步骤&#xff0c;完成数据清洗。 titanic数据集包含11个特征&#xff0c;分别是&#xff1a; Survived:0代表死亡&#xff0c;1代表存活Pclass:乘客所持票类&#xff0c;有三种值(1,2,3)Name:乘客…

微小宝公众号排行榜_榜单 广东省技工院校微信公众号排行榜(第51期)

▼2020年10月榜单出炉&#xff01;本期榜单最大看点&#xff0c;莫过于发文33篇的劳模代表——“广东高新技术高级技校”以高达830.49的微信传播指数WCI&#xff0c;荣登第51期广东省技工院校微信公众号排行榜榜首&#xff01;截至本期&#xff0c;实力一向强劲的“广东高新技术…

word公式编辑器_【Word技巧】word使用终极技巧,工程人必会(四)

1、问&#xff1a;Word中怎么在一个英文字母上打对号&#xff1f;答&#xff1a;透明方式插入图片对象&#xff0c;内容是一个√2、问&#xff1a;Word里怎么显示修订文档的状态&#xff1f;文档修订后&#xff0c;改后标记很多&#xff0c;但是在菜单里没有“显示修订最终状态…

加载oracle属性文件,关于属性文件的详细介绍

我们通常会将Java应用的配置参数保存在属性文件中&#xff0c;Java应用的属性文件可以是一个正常的基于key-value对,以properties为扩展名的文件&#xff0c;也可以是XML文件. 在本案例中&#xff0c;將会向大家介绍如何通过Java程序输出这两种格式的属性文件&#xff0c;并介绍…

android 访问服务器sql_XSS 攻击、CSRF 攻击、SQL 注入、流量劫持(DNS 劫持、HTTP 劫持)—— 浏览器安全

今天看了 jsliang 大佬关于网络安全的文章&#xff0c;为了加深一下印象&#xff0c;自己动手写一下。 主要参考文章&#xff1a;网络安全 ——— jsliang XSS攻击 XSS&#xff08;Cross Site Script&#xff09;跨站脚本攻击&#xff0c;指的是向网页注入恶意代码&#xff0c;…

simulink和psim仿真结果不同_在HFSS进行AC耦合电容仿真优化怎么做?

AC耦合电容&#xff0c;也叫DC blocking隔直电容&#xff0c;在几乎所有的高速串行链路中&#xff0c;都可以看到它的身影&#xff0c;它的主要作用是去掉信号中的直流偏置分量&#xff0c;同时让高频分量可以顺利通过&#xff0c;类似于一个高宽带的滤波器。由于电容的焊盘通常…

民生银行 一码付 php,PHP开心码支付免签约第四方支付平台源码修复版

源码说明后台号码admin后台密码123456声明&#xff1a;该源码仅供学习出现&#xff0c;修复者不承担任何责任&#xff0c;下载安装即代表使用者自行承担责任源码安装方法需要服务器开启g11插件PHP5.6&#xff0c;主机用户推荐95云主机&#xff0c;因为已经开启所有扩展插件必须…

oracle主从表分离怎么实时更新数据_高可用数据库UDB主从复制延时的解决

MySQL主从复制的延时一直是业界困扰已久的问题。延时的出现会降低主从读写分离的价值&#xff0c;不利于数据实时性较高的业务使用MySQL。UDB是UCloud推出的云数据库服务&#xff0c;上线已达六年&#xff0c;运营了数以万计的UDB MySQL实例。除了提供高可用、高性能、便捷易用…

vp翻N_VP刀叨叨:如何让G胖给你唱生日歌

VS看起来好凶喵▼ESL欧洲&独联体区VP发推庆祝击败OG昨晚第九个比赛日&#xff0c;OG与VP的比赛无疑是大家关注的焦点&#xff0c;一边是TI双冠王&#xff0c;一边是状态开始回升的俄罗斯毛熊&#xff0c;大家都很期待他们能给我们带来精彩的比赛。不过比赛结果却出乎了不少…

秒后面的单位是什么_为什么兰州马拉松很难跑出好成绩?

如果要评选中国最难PB的马拉松&#xff0c;西北第一马兰州马拉松当之无愧可以排名第一。为什么这么说呢&#xff1f;先来看下今年兰马的一组数据&#xff0c;不管是精英选手还是大众选手&#xff0c;成绩都要比个人PB慢。国内男子冠军是管油胜&#xff0c;成绩为2小时18分58秒&…

surface php老是用不了,surface pro7触摸屏没反应怎么办

发生该问题的原因可能是&#xff1a;有很多可能原因&#xff0c;从校准到硬件或者固件。故障排查可以找到根本原因。1. 清洁屏幕将柔软的无绒布蘸上水或眼镜清洗液来清洁屏幕&#xff0c;但不要直接在屏幕上喷洒液体。2. 重启 Surface注意&#xff1a;你将需要连接键盘或鼠标到…

小优优(u盘歌曲顺序调整)_电脑从U盘启动,这三种方式你知道吗?

Windows 可以运行在数千台不同配置的电脑上, 但安装 Windows 10又是另一回事, 具体取决于你的电脑是否安装了现有的 Windows 10,以及早期版本,像是 Windows7, Windows XP, 或完全不同的操作系统(如 macOS 或 Linux)。大多数情况, 安装系统都依赖于主硬盘HDD或SSD以外的设备启动…

unity vs没有智能提示_Unity博主营地你不可不知的Unity C#代码小技巧

「Unity博主营地第一期」于2019年11月开启&#xff0c;现已收到数百篇原创投稿。每周根据Unity Connect社区反馈&#xff0c;帮助大家发现最优质、最干货、最受欢迎的博文作品。开门见山的说&#xff0c;这篇文章干到挤不出一点水分。文章主要针对Unity初学者&#xff0c;相信读…

python123数值运算_python123中 Hello World的条件输出 和数值运算

描述 获得用户输入的一个整数&#xff0c;参考该整数值&#xff0c;打印输出"Hello World"&#xff0c;要求&#xff1a;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪…

苹果sf字体_苹果UI设计的改变意味着什么?

WWDC虽然已经过去了一段时间&#xff0c;虽然没有什么硬件产品&#xff0c;但还是给我们带来了许多新的惊喜。但我们这篇文章不谈技术问题&#xff0c;只谈苹果的UI变化。因为这可能是近10年来苹果第二次颠覆性的升级&#xff0c;上次还是2013年的iOS7的全面扁平化。从设计的层…