点击跳转 - 原文地址

数据类型 - 字典(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内核指针和错误值

    很多内部内核函数返回一个指针值给调用者. 许多这些函数也可能失败. 大部分情况, 失 败由返回一个 NULL 指针值来指示. 这个技术是能用的, 但是它不能通知问题的确切特性. 一些接口确实需要返回一 ...

  2. dotnet 控制台读写 Sqlite 提示 no such table 找不到文件

    在使用 dotnet 读写 Sqlite 可以通过 EF Core 的方法,但是在 EF Core 创建的数据库可能和读写的数据库不是相同的文件 在我运行代码的时候发现在通过迁移创建数据库,创建的文件 ...

  3. 【15.93%】【codeforces 672D】Robin Hood

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  4. How to fix nuget Unrecognized license type MIT when pack

    When I packaging license within the nupkg, I will using License to replace licentUrl. I using this c ...

  5. js window.open 页面之间的通讯(不同源)

    一:a页面1:打开b页面let isB= window.open('b.html','b'); 2:a页面发送消息给b页面     isB.postMessage("dsddfsdf&quo ...

  6. codeforces 1194F (组合数学)

    Codeforces 11194F (组合数学) 传送门:https://codeforces.com/contest/1194/problem/F 题意: 你有n个事件,你需要按照1~n的顺序完成这 ...

  7. Lede定时重拨

    系统,计划任务,   0 4 * * * ifup wan 梅林定时重拨: #! /bin/sh #断开拨号连接 killall pppd #延时10秒 #重新拨号 pppd >& &a ...

  8. java框架篇---Struts2 本地化/国际化(i18n)(转)

    源地址:https://www.cnblogs.com/oumyye/p/4368453.html 国际化(i18n)是规划和实施的产品和服务,使他们能很容易地适应特定的本地语言和文化的过程中,这个过 ...

  9. Nmap基本使用

    Nmap ​ Network Mapper ​ 一款开源免费的网络发现和安全审计工具. 用途 ​ 列举网络主机清单 ​ 监控主机或服务运行状况 ​ 管理服务升级调度 ​ 检测目标主机是否在线 ​ 检测 ...

  10. Spring Boot 嵌入式Web容器

    目录 前言 1.起源 2.容器启动流程解析 2.1.获取应用类型 2.2.容器启动流程 3.加载 Web 容器工厂 4.总结 前言         最近在学习Spring Boot相关的课程,过程中以 ...