点击跳转 - 原文地址

数据类型 - 字典(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】一张图看懂字典并学会操作的更多相关文章

  1. 【python系统学习06】一张图看懂列表并学会操作

    点击跳转-原文地址 数据类型 - 列表(list) 「目录:」 一张图了解列表 列表是什么 列表长啥样 语法格式 代码示例 格式特征 列表定义 列表操作 - 提取单个:偏移量 什么是偏移量 偏移量提取 ...

  2. 一张图看懂ANSYS17.0 流体 新功能与改进

    一张图看懂ANSYS17.0 流体 新功能与改进   提交 我的留言 加载中 已留言   一张图看懂ANSYS17.0 流体 新功能与改进 原创2016-02-03ANSYS模拟在线模拟在线 模拟在线 ...

  3. FUNMVP:几张图看懂区块链技术到底是什么?(转载)

    几张图看懂区块链技术到底是什么? 本文转载自:http://www.cnblogs.com/behindman/p/8873191.html “区块链”的概念可以说是异常火爆,好像互联网金融峰会上没人 ...

  4. 4张图看懂delphi 10生成ipa和在iPhone虚拟器上调试(教程)

    4张图看懂delphi 10生成ipa和在iPhone虚拟器上调试(教程) (2016-02-01 03:21:06) 转载▼ 标签: delphi ios delphi10 教程 编程 分类: 编程 ...

  5. [转帖]两张图看懂GDT、GDTR、LDT、LDTR的关系

    两张图看懂GDT.GDTR.LDT.LDTR的关系 2018-06-09 18:13:53 Six_666A 阅读数 2044更多 分类专栏: 深入理解linux内核   转自:http://ju.o ...

  6. 一张图看懂开源许可协议,开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别

    一张图看懂开源许可协议,开源许可证GPL.BSD.MIT.Mozilla.Apache和LGPL的区别 首先借用有心人士的一张相当直观清晰的图来划分各种协议:开源许可证GPL.BSD.MIT.Mozi ...

  7. 一张图看懂css的position里的relative和absolute的区别

    position有以下属性:static.inherit.fixed.absolute.relative前三个好理解好区分:static:是默认状态,没有定位,元素出现在正常的流中(忽略 top, b ...

  8. 一张图看懂Function和Object的关系及简述instanceof运算符

    我在写一篇图解prototype和__proto__的区别时,搜资料搜到了一个有意思的现象,下面这两个运算返回的结果是一样的: Function instanceof Object;//true Ob ...

  9. Nodejs学习笔记(三)——一张图看懂Nodejs建站

    前言:一条线,竖着放,如果做不到精进至深,那就旋转90°,至少也图个幅度宽广. 通俗解释上面的胡言乱语:还没学会爬,就学起走了?! 继上篇<Nodejs学习笔记(二)——Eclipse中运行调试 ...

随机推荐

  1. Linux 内核释放函数和 kobject 类型

    讨论中仍然缺失的一个重要事情是当一个 kobject 的引用计数到 0 时会发生什么. 创建 kobject 的代码通常不知道什么时候要发生这个情况; 如果它知道, 在第一位使用一个引 用计数就没有意 ...

  2. Linux 创建和销毁 urb

    struct urb 结构在驱动中必须不被静态创建, 或者在另一个结构中, 因为这可能破坏 USB 核心给 urb 使用的引用计数方法. 它必须使用对 usb_alloc_urb 函数的调用而被创 建 ...

  3. UE4 中的 C++ 与 蓝图交互

    1.Unreal 引擎提供了两种创建新 Gameplay 元素的方法:C++ 和 蓝图视觉脚本. 通过 C++,程序员构建基础游戏系统:设计师可以基于此系统为场景 / 游戏创建自定义的游戏玩法. 这种 ...

  4. IAP升级

    一.IAP原理 1.在正常情况下,程序运行路流程: 和STM32类似,STM8内部闪存(FLASH)地址起始于 0x8000(STM32是0x08000000),一般情况下,程序文件就从此地 址开始写 ...

  5. ASP.NET MVC API以及.Core API进行安全拦截和API请求频率控制

    安全拦截思路: 根据IP以及请求次数,该IP超过规定请求次数,就有很大可能是非正常用户进行的请求(比如WEB攻击),这时候进行拦截,拦截成功会提示:The allowed number of requ ...

  6. PRML第一章读书小结

    PRML第一章读书小结     第一章用例子出发,较为简单的引入了概率论.模型.决策.损失.信息论的问题,作为机器学习从业者,读PRML除了巩固已有基础,还受到了很多新的启发,下面将我收到的启发总结如 ...

  7. 【题解】P4091 [HEOI2016/TJOI2016]求和

    [题解]P4091 [HEOI2016/TJOI2016]求和 [P4091 HEOI2016/TJOI2016]求和 可以知道\(i,j\)从\(0\)开始是可以的,因为这个时候等于\(0\).这种 ...

  8. 洛谷$P$3066 逃跑的$BarnRunning\ Away\ From…$ $[USACO12DEC]$ 主席树

    正解:主席树 解题报告: 传送门! 1551做$dp$实在是做不下去了,,,于是来水点儿别的题$QAQ$ 然后这题,挺纸老虎的我$jio$得,,,看起来很难的样子然后仔细想下之后发现依然是个板子呢,, ...

  9. 使用Theia——构建你自己的IDE

    上一篇:Theia架构 构建你自己的IDE 本指南将教你如何构建你自己的Theia应用. 必要条件 你需要安装node 10版本(译者:事实上最新的node稳定版即可): curl -o- https ...

  10. Java 自增、自减

    i++/i-- 先使用变量的值,然后改变该变量的值: ++i/--i 先改变该变量的值,然后使用变量的值: : i = i++; 最终变量i的值到底是变成1呢还是保持为0呢? java中变量自增.自减 ...