python列表嵌套字典取值_我的 python 学习历程-Day05 字典/字典的嵌套
一、字典的初识
- 为什么要有字典
字典与列表同属容器型数据类型,同样可以存储大量的数据,但是,列表的数据关联性不强,并且查询速度比较慢,只能按照顺序存储。 - 什么是字典
- 先说一下什么叫可变与不可变的数据类型分类
- 不可变(可哈希)数据类型: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 以后都是有序的了。
- 字典的优点:查询速度非常快,存储关联性的数据。
- 字典的缺点:以空间换时间。也就是说,它的内存消耗非常大。
- 字典的基本格式
- 字典是Python语言中的映射类型,他是以{}括起来,里面的内容是以键值对的形式储存的
- 字典的创建
# 面试会考 # 方式一: 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.pop('键','第二个参数值')
- 字典的改
- 直接改
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.keys() 查找字典中所有的键
三、字典的嵌套
字典的嵌套是非常重要的知识点,这个必须要建立在熟练使用字典的增删改查的基础上,而且字典的嵌套才是咱们在工作中经常会遇到的字典,工作中遇到的字典不是简简单单一层,而就像是葱头一样,一层接一层,但一般都是很有规律的嵌套,那么接下来我们就学习一下字典的嵌套:
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 字典/字典的嵌套相关推荐
- 27. Python 列表的索引取值
27. 列表的索引取值 文章目录 27. 列表的索引取值 1. 列表的索引 2. 列表索引取值 3. 列表的正索引取值 4. 列表的负索引取值 5. 用列表本身取值 6. 从嵌套列表中取值 7. 课后 ...
- 28. Python 列表的切片取值
28. 列表的切片取值 文章目录 28. 列表的切片取值 1. 列表的切片 2. 切片的语法 3. 切片取值示例 3.1 步长为1的切片取值 3.2 步长为3的切片取值 3.3 负索引取值 1. 列表 ...
- python 字典取值加引号创建一个对象_Python在添加到字典时从列表项中删除单引号...
我试过类似帖子中的所有推荐,但都没有成功.我有一个用于为字典列表创建值的项列表.该列表最终将成为一个JSON对象,因此我不能在添加到其中的每个列表项周围使用单引号.在metrics = [" ...
- python 列表间隔取值_程序从Python中的间隔列表中查找最长间隔的长度
假设我们有一个间隔列表,其中每个间隔的格式为[start,end].我们必须找到可以合并任意数量的重叠间隔的最长间隔. 因此,如果输入类似于[[1,6],[4,9],[5,6],[11,14],[16 ...
- 列表根据下标取值_散列表(上):Word文档中的单词拼写检查功能是如何实现的?...
Word这种文本编辑器你平时应该经常用吧,那你有没有留意过它的拼写检查功能呢?一旦我们在Word里输入一个错误的英文单词,它就会用标红的方式提示"拼写错误".Word的这个单词拼写 ...
- python删除列表中的重复值_如何从 Python 列表中删除重复项
例子解释 创建一个以 List 作为参数的函数. 创建函数 def my_function(x): return list(dict.fromkeys(x)) mylist = my_function ...
- 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] ...
- python列表有固定大小吗_如何在python中创建固定大小的列表?
(tl:dr:对您的问题的确切答案是numpy.empty或numpy.empty_like,但是您可能不在乎,可以使用myList = [None]*10000.) 简单方法 您可以将列表初始化为所 ...
- python列表输入数字逗号隔开_第一行Python代码之我的第一个Project(3)
EMS项目之dict字典结构 文章目录 dict字典介绍 字典输出 更新字典值 删除字典和字典元素 tuple数据类型 数据结构总结 dict字典介绍 字典是另一种可变容器模型,且可存储任意类型对象. ...
最新文章
- python编程语言能干什么-这 13个,1 行Python代码能干哪些事?
- sql 中的导航函数 FIRST_VALUE, LAST_VALUE
- 混合云存储开启企业上云新路径--阿里云混合云备份容灾方案发布 1
- 不实用额外变量 交换_变量交换:巧用异或运算
- Succinctly 中文系列教程 20220109 更新
- 特征图注意力_ICLR2017 | AT_注意力引导的知识蒸馏
- ES6学习(五)—数组的扩展
- 升级win10遇到的一些问题
- wordpress静态文件加速,整合CDN
- Django根据现有数据库建立/更新model
- 如何借助表格优化直通车分时折扣
- 考研数据库复习(一) 过一遍教材
- 7-1 设计一个风扇Fan类 (20 分)JAVA PTA
- 如何以活动价在官网购买百度网盘会员
- MySQl排序,别名
- Dedecms QQ一键登录插件
- CF498D Traffic Jams in the Land
- 【产业互联网周报】AI独角兽们集体亮相安博会,侧重点各不相同;BAT智慧城市布局进一步加深...
- error C1083:无法打开文件stddef.h或crtd bg.h
- Ruby on Rails 实践:优化rvm安装、下载速度
热门文章
- 小程序 pagescrollto_微信小程序学习笔记(三)-- 首页及详情页开发
- Halcon算子学习:sample_object_model_3d
- python连接mysql的一些基础知识+安装Navicat可视化数据库+flask_sqlalchemy写数据库
- pycharm远程连接服务器(docker)调试+ssh连接多次报错
- 以LeNet-5为例理解CNN
- PyQt5 快速开发 与 实战
- Java8 Stream详解~聚合(max/min/count)
- Java加密与解密的艺术~思维导图
- 硬件安全 (1) —— SHA-1算法在FPGA上的实现
- C++学习之路 | PTA乙级—— 1018 锤子剪刀布 (20分)(精简)