【python系统学习07】一张图看懂字典并学会操作
数据类型 - 字典(dict)
目录:
一张图get字典
一张图get字典的些许知识点
如果图中知识点描述过于概括,请看下列细文:
字典是什么
js的对象
说到字典,前端同学可以理解其为:对象。因为python中的字典和js中的对象长的不能说很像,简直就是一样。
字典是一到多个一一对应的键值对儿元素组成的集合。
它同列表一样,也是复杂数据类型的一种。
其中,字典内的键名必须是字符串类型的,而键名所对应的值可以是任何类型的。
字典长啥样
说了这么多,字典到底啥样?揭开神秘面纱:
语法伪代码
列表变量名 = {
'字符串键名key1': 对应key1的值value1,
'字符串键名key2': 对应key2的值value2,
...(更多key、value对儿)
}
示例demo
一个字典定义的demo代码,可以留神下,接下来的案例可能会用到。
dictName = {
'name': '小石头',
'age': 19,
'hobby': {
'it': ['css','js','python'],
'daily': [['music','tv'],['apple','pear']],
'sports': 'sleep'
},
'married': True
}
语法成像
通过伪代码和demo代码我们可以总结出以下关于字典的特征点:
变量名自定义
等号将字典赋值给变量(dictName)
等号右边的是字典,用一对儿花括号包裹
字典内部是一对对的键值对(键:
key
; 值:value
)。键名用字符串
即键名必须用引号包裹,否则就会报错 错误类型: NameError
,变量未定义的错误
键名是需要唯一不重复的
如上,dictName中,只能有一个"age" 若有多个同名键,只保留最后一个键
keyNameOnly = {
'age': 29,
'age': 19,
'name': '小石头'
}
print(keyNameOnly)
# {'age': 19, 'name': '小石头'} age对应29的键值对被覆盖了
值value可以任何类型
一个对象内值内容可重复
valueNameRepeat = {
'name': '小石头',
'like': '小石头',
'realTalk': True
}
print(valueNameRepeat)
# {'name': '小石头', 'like': '小石头', 'realTalk': True} 值‘小石头’重复也无所谓。
键名与值之间用英文冒号连接
键(key)与值(value)形成的组合叫做键值对儿
每对儿键值对之间用英文逗号分隔
字典里可以有无数对儿键值对
最后一对儿键值对不需要逗号
字典怎么用
字典长度获取——len函数
我们可以用len()
函数来得出一个列表或者字典的长度(元素个数)
括号里放列表或字典名称
print(len(dictName)) #4,因为又4对儿,键名分别是name、age、hobby和married
列表的长度也是用len()函数获取
提取字典中的元素
通过字典的索引(键名)来获取对应的值
伪代码:
字典名[字典的键]
字典没有偏移量,所以中括号写的是键名
demo:
dictName['name'] # 小石头
嵌套提取
拓展 - 二维嵌套列表值的提取方法
同样是用偏移量来获取。
listdemo = [['music','tv'],['apple','pear']]
print(listdemo[1][1]) # pear
先用第一个偏移量获取最外边列表的第1个元素。得到列表['apple','pear']
后,再继续追加一个偏移量[1]获取得到的列表['apple','pear']
中第一个元素,打印出'pear'
拓展 - 多维嵌套字典中值的提取方法
因为是用键名,而不是偏移量的方法获取。所以感觉在理解逻辑上,比列表容易让初学者接受。
print(dictName['hobby']['sports']) # sleep
先用键名"hobby"获取其对应的值,再用“hobby”里的"sports"获取其sports自己对应的值。得到"sleep"
拓展 - 列表与字典互相嵌套时值的提取方法
举一反三,概念加强版
print(dictName['hobby']['daily'][0][0]) # music
往字典中增加元素
新增键值对要用到赋值语句
伪代码:
字典名[键] = 值
自我感觉很好理解。只需要在提取的基础上赋值即可。
⚠️但可能需要注意,如果键名是字典中已经存在的,再这么操作就会直接修改这个键的值。
示例代码:
dictName['homeland'] = 'china'
print(dictName)
删除字典中的元素
删除字典里键值对的代码是del语句
伪代码:
del 字典名[键]
示例代码:
del(dictName['married'])
print(dictName)
对比列表的异同
相同点
1、修改值时都是通过赋值:在列表和字典中,如果要修改元素,都可用赋值语句来完成
2、值类型支持任意嵌套:除基本数据类型外,列表可嵌套其他列表和字典,字典也可嵌套其他字典和列表。
不同点
1、比较相等时规则不同
列表中的元素是有自己明确的“位置”的,所以即使看似相同的元素,只要在列表所处的位置不同,它们就是两个不同的列表
而字典中的数据是随机排列的,所以相比时即使键调动顺序也不影响
代码观察:
students1 = ['小明','小红','小刚']
students2 = ['小明','小红','小刚']
print(students1 == students2)
# True 必须元素顺序、个数、内容皆一致则相同
students3 = ['小明','小红','小刚']
students4 = ['小明','小刚','小红']
print(students3 == students4)
# False 改变了一下顺序就不相等了
scores1 = {'小明':95,'小红':90,'小刚':100}
scores2 = {'小刚':100,'小明':95,'小红':90}
print(scores1 == scores2)
# True 只要两个字典中,键名及其分别对应的值都一一相等,则整个字典相等。
scores3 = {'小明':95,'小红':90,'小刚':100}
scores4 = {'小明':9,'小红':90,'小刚':100}
print(scores3 == scores4)
# False 这样,即使键名一一对应,键名所对应的值不同,最终结果不相等。
2、读取数据的方法不同
列表有序,要用偏移量定位
字典无序,可通过唯一的键来取值
观察代码:
# 提取列表中的数据 - 用偏移量/索引/下标
listdemo = ['apple','pear']
print(listdemo[1]) # pear
# 提取字典中的数据 - 用键名
keyNameOnly = {
'age': 29,
'age': 19,
'name': '小石头'
}
print(keyNameOnly['age']) # 19
练习题
you = {
'name': '',
'a': [{
'b': {
'c': '强撑',
'love': 'anybody'
}
}],
'age': 30
}
4、在b里边增加爱好,为一个数组,数组内容自定
3、删除“age”
2、修改“name”的值
1、提取出“love”的值
【python系统学习07】一张图看懂字典并学会操作的更多相关文章
- 【python系统学习06】一张图看懂列表并学会操作
点击跳转-原文地址 数据类型 - 列表(list) 「目录:」 一张图了解列表 列表是什么 列表长啥样 语法格式 代码示例 格式特征 列表定义 列表操作 - 提取单个:偏移量 什么是偏移量 偏移量提取 ...
- 一张图看懂ANSYS17.0 流体 新功能与改进
一张图看懂ANSYS17.0 流体 新功能与改进 提交 我的留言 加载中 已留言 一张图看懂ANSYS17.0 流体 新功能与改进 原创2016-02-03ANSYS模拟在线模拟在线 模拟在线 ...
- FUNMVP:几张图看懂区块链技术到底是什么?(转载)
几张图看懂区块链技术到底是什么? 本文转载自:http://www.cnblogs.com/behindman/p/8873191.html “区块链”的概念可以说是异常火爆,好像互联网金融峰会上没人 ...
- 4张图看懂delphi 10生成ipa和在iPhone虚拟器上调试(教程)
4张图看懂delphi 10生成ipa和在iPhone虚拟器上调试(教程) (2016-02-01 03:21:06) 转载▼ 标签: delphi ios delphi10 教程 编程 分类: 编程 ...
- [转帖]两张图看懂GDT、GDTR、LDT、LDTR的关系
两张图看懂GDT.GDTR.LDT.LDTR的关系 2018-06-09 18:13:53 Six_666A 阅读数 2044更多 分类专栏: 深入理解linux内核 转自:http://ju.o ...
- 一张图看懂开源许可协议,开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别
一张图看懂开源许可协议,开源许可证GPL.BSD.MIT.Mozilla.Apache和LGPL的区别 首先借用有心人士的一张相当直观清晰的图来划分各种协议:开源许可证GPL.BSD.MIT.Mozi ...
- 一张图看懂css的position里的relative和absolute的区别
position有以下属性:static.inherit.fixed.absolute.relative前三个好理解好区分:static:是默认状态,没有定位,元素出现在正常的流中(忽略 top, b ...
- 一张图看懂Function和Object的关系及简述instanceof运算符
我在写一篇图解prototype和__proto__的区别时,搜资料搜到了一个有意思的现象,下面这两个运算返回的结果是一样的: Function instanceof Object;//true Ob ...
- Nodejs学习笔记(三)——一张图看懂Nodejs建站
前言:一条线,竖着放,如果做不到精进至深,那就旋转90°,至少也图个幅度宽广. 通俗解释上面的胡言乱语:还没学会爬,就学起走了?! 继上篇<Nodejs学习笔记(二)——Eclipse中运行调试 ...
随机推荐
- ASP.NET Core 开启后台任务
本文告诉大家如何通过 Microsoft.Extensions.Hosting.BackgroundService 开启后台任务 实现 BackManagerService 类继承 Backgroun ...
- H3C使用ping命令--用户视图
完整的ping命令,用于下面参考 <H3C>ping 1.1.1.1 PING 1.1.1.1: 56 data bytes, press CTRL_C to break R ...
- C/C++ 获取键盘事件
Windows 系统下的 vs 中可以使用 _kbhit() 函数来获取键盘事件,使用时需要加入 conio.h 头文件 #include <conio.h> #include <i ...
- 【hdu 1848】Fibonacci again and again
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ...
- Maven 运行 tomcat:run 时出现 Unable to compile class for JSP...
近来无事便去看了看神奇的 Maven , 但写第一个 Hello,World 就非常不友好的怼给我一个 500, 很是郁闷; 开发环境: JDK1.8, Maven 3.5 项目目录: \maven_ ...
- Java 学习笔记(7)——接口与多态
上一篇说了Java面向对象中的继承关系,在继承中说到:调用对象中的成员变量时,根据引用类型来决定调用谁,而调用成员方法时由于多态的存在,具体调用谁的方法需要根据new出来的对象决定,这篇主要描述的是J ...
- MindManager使用技巧
任务窗格在右下角. 1.条件的设置与编辑 2.优先级视图 不是优先级图标 3.圆圈图 4.洋葱图的使用 右键选择背景再选择解锁所有背景就可以对所有圆形进行调整了 点图形边缘出现十字架可以进行移动 5 ...
- 7.13 Python基础语法
Python基础语法 编码: 默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串. 当然你也可以为源码文件指定不同的编码 python2.7中有两个函数 ...
- 嗨,让我带你逐行剖析Vue.js源码
本项目受到了阮一峰老师的肯定,已刊登在阮一峰老师微信公众号的科技爱好者周刊第87期,同时也被多个微博大V转发,短短一个月时间内在github上star数量就已经突破2k! Hello,大家好,我最近在 ...
- 洛谷$P2604\ [ZJOI2010]$网络扩容 网络流
正解:网络流 解题报告: 传送门$QwQ$ 昂第一问跑个最大流就成不说$QwQ$ 然后第二问,首先原来剩下的边就成了费用为0的边?然后原来的所有边连接的两点都给加上流量为$inf$费用为$w$的边,保 ...