[Python3] 016 字典:给我一块硬盘,我可以写尽天下!
0 字典的独白
- 英文名:dict()
- 我是一种组合数据,没有顺序
- 我的数据以“键值对”的形式出现
- 键值对:
- 听上去有点像高中有机化学里的“化学键”,不过请放心,这里的“键”不会因为吸收能量而“断裂”
- 它更像是函数的映射,可以改变指向的值
1 字典的创建
- 示例:
# 例1.1 创建空字典
d1_1 = {}
d1_2 = dict()
print("d1_1 =", d1_1)
print("d1_2 =", d1_2)
- 运行结果
d1_1 = {}
d1_2 = {}
# 例1.2 创建有值的字典
# 每一组数据用冒号隔开(冒号相当于“键”)
# 每一对键值对用逗号隔开
d1_3 = {"one":1, "two":2, "three":3}
d1_4 = dict({"one":1, "two":2, "three":3})
d1_5 = dict(one=1, two=2, three=3)
d1_6 = dict( [("one",1), ("two",2), ("three",3)])
print("d1_3 =", d1_3)
print("d1_4 =", d1_4)
print("d1_5 =", d1_5)
print("d1_6 =", d1_6)
- 运行结果
d1_3 = {'one': 1, 'two': 2, 'three': 3}
d1_4 = {'one': 1, 'two': 2, 'three': 3}
d1_5 = {'one': 1, 'two': 2, 'three': 3}
d1_6 = {'one': 1, 'two': 2, 'three': 3}
2 字典的特性
- 字典是序列类型中的无序序列,所以不能分片和索引
- 字典中的数据每个都由键值对组成,即 kv 对
- key:必须是可哈希的值,比如 int,string,float,tuple;但是 list,set,dict 不行
- value:任何值
3 字典的常见操作
(1) 数据的访问、更改与删除
# 例2.1 访问数据
d2 = {"one":1, "two":2, "three":3}
print(d2["one"]) # 中括号内是键值
- 运行结果
1
# 例2.2 更改数据;接着例2.1
d2["one"] = "一"
print(d2)
- 运行结果
{'one': '一', 'two': 2, 'three': 3}
# 例2.3 使用 del 删除一组键值对;接着例2.2
del d2["one"]
print(d2)
- 运行结果
{'two': 2, 'three': 3}
(2) 成员检测
# 例3 in
# 检测的是 key 的内容
d3 = {"one":1, "two":2, "three":3}
if 2 in d3:
print("value")
if "two" in d3:
print("key")
if ("two",2) in d3:
print("kv")
- 运行结果
key
也可以用 not in。
(3) 遍历
# 例4.1 for 循环跟着 key 走
d4 = {"one":1, "two":2, "three":3}
for k in d4:
print(k, "<-->", d4[k])
- 运行结果
one <--> 1
two <--> 2
three <--> 3
字典的遍历在 Python2 与 Python3 中区别较大。挖个坑,日后填平,编号 Py016-1。
# 例4.2 例4.1 的代码可以改写成如下样子
for k in d4.keys():
print(k, d4[k])
for v in d4.values(): # 只访问字典的值
print(v)
for k,v in d4.items():
print(k,'<-->',v)
- 运行结果
one 1
two 2
three 3
1
2
3
one <--> 1
two <--> 2
three <--> 3
4 字典生成式
- 少废话,上例子
# 例5
d5_1 = {"one":1, "two":2, "three":3}
d5_2 = {k:v for k,v in d5_1.items()} # 常规字典生成式
print(d5_2)
d5_3 = {k:v for k,v in d5_1.items() if v % 2 == 0} # 加限制条件的字典生成式
print(d5_3)
- 运行结果
{'one': 1, 'two': 2, 'three': 3}
{'two': 2}
5 字典的内置方法
6 可供字典使用的其它方法/函数
(1) 测量君 len()
# 例6
d6 = {"one":1, "two":2, "three":3}
print(len(d6))
- 运行结果
3
(2) 最值双子 max() & min()
# 例7.1
d7 = {"one":1, "two":2, "three":3}
print(max(d7))
print(min(d7))
- 运行结果
two
one
小老弟,你怎么回事?翻车了?
不急,这是错误示范;当然,从 ASCII 码角度讲,t>o; w>h => two 为 max,同理,one 为 min。
# 例7.2
d7 = {"one":1, "two":2, "three":3}
key_max = max(d7, key=d7.get) # get 见下面补充
key_min = min(d7, key=d7.get)
print(key_max)
print(key_min)
- 运行结果
three
one
(3) 补充:get(key, default=None)
- 本想放到内置方法中去的,现在看来,得提前了
- 释义:如果"键"在字典中,则返回键的值;否则,返回默认值
- 示例:
# 例8.1
d8 = {"one":1, "two":2, "three":3}
print(d8.get("one"))
print(d8.get("four"))
- 运行结果
1
None
- 默认值的默认值为 None,不过可以自定义。
# 例8.2
d8 = {"one":1, "two":2, "three":3}
print(d8.get("four", "sorry"))
- 运行结果
sorry
- 注意不要画蛇添足
# 例8.3
d8 = {"one":1, "two":2, "three":3}
print(d8.get("four", default="sorry"))
- 运行结果
TypeError……get() takes no keyword arguments
get() 不接受关键字参数。
(4) fromkeys(iterable, value=None)
- 释义:创建一个新字典,由 iterable 中的键 和 value 设置的值构成,value 默认为 None
# 例9
# 使用指定的序列作为键,使用一个值作为字典所有键的值
l9 = ["one", "two", "three"]
d9_1 = dict.fromkeys(l9)
d9_2 = dict.fromkeys(l9, "number")
print(d9_1)
print(d9_2)
- 运行结果
{'one': None, 'two': None, 'three': None}
{'one': 'number', 'two': 'number', 'three': 'number'}
(5) str(dict)
# 例10
d10 = {"one":1, "two":2, "three":3}
print(str(d10))
- 运行结果
{'one': 1, 'two': 2, 'three': 3}
[Python3] 016 字典:给我一块硬盘,我可以写尽天下!的更多相关文章
- [Python3] 017 字典的内置方法
目录 1. Python3 中如何查看 dict() 的内置方法 2. 少废话,上例子 (1) 清理大师 clear() (2) 拷贝君 copy() (3) get(key, default=Non ...
- RAID5当一块硬盘离线后处理
RAID5当一块硬盘离线后,处理降级状态,这时候正常的建议是马上更换硬盘做REBUILD以恢复完整的数据状态,如果有热备盘的话,就会自动做REBUILD,这样做合适吗? 一组RAID卷在工作很长时间以 ...
- 【运维】浪潮服务器一块硬盘显示红色Offline(或者Failed)解决办法
[写在前面] 最近服务器不知道为什么总是出现故障,以前戴尔服务器硬盘出现故障,也就是说硬盘旁边的灯显示为红色的时候,一般情况下都是表示硬盘坏掉了,直接买一块新的硬盘,将坏掉的硬盘拿 ...
- 新添加一块硬盘制作LVM卷并进行分区挂载
linux服务器新添加一块硬盘,可以直接将盘格式化挂载就能用,比如挂载在/usr/local目录,但是这样有一个弊端,就是如果这一块磁盘满了,后续想要扩容的话,不能继续挂载这个/usr/local挂载 ...
- 新加了一块硬盘,在bios中可以看的到,在系统的磁盘管理器中看不到新加硬盘
今天新加了一块硬盘,进入bios中可以看到新加的硬盘,但是进入系统后在磁盘管理及磁盘驱动器中都看不到.并且在设备管理器下其他设备出现了ATA channel1,前面显示感叹号,如下图所示: 而且电脑变 ...
- 【linux】新添加一块硬盘制作LVM卷并进行分区挂载
linux服务器新添加一块硬盘,可以直接将盘格式化挂载就能用,比如挂载在/usr/local目录,但是这样有一个弊端,就是如果这一块磁盘满了,后续想要扩容的话,不能继续挂载这个/usr/local挂载 ...
- centos 7 增加一块硬盘的步骤
1) 增加一块硬盘 1G [到设置中添加一块硬盘即可] 2) 重启一下服务器 lsblk -f 查看硬盘 3) 给 sdb 硬盘分区 fdisk /dev/sdb n,p,enter,enter,w ...
- linux新增一块硬盘加入原有分区
原有硬盘空间已经不足,添加一块新硬盘,并且加入到原根目录下 查看新硬盘 1 2 fdisk -l Disk /dev/sdb: 240.1 GB, 240057409536 bytes 在新硬盘上创建 ...
- python3判断字典、列表、元组为空以及字典是否存在某个key的方法
#!/usr/bin/python3 #False,0,'',[],{},()都可以视为假 m1=[] m2={} m3=() m4={"name":1,"age&quo ...
随机推荐
- AT Regular 086
C - Not so Diverse 略 D - Non-decreasing 先找绝对值最大的数 构造出全正(最大的数为正) 或者全负(最大的数为负) 然后前缀和(正)或者后缀和(负) 操作次数2n ...
- AGC014做题记录
貌似是比较水的一场 可是我依然8会做 C 发现除了第一步以外的走法都不会受到锁的影响并且一定选四个方向距离最近的径直走过去 那么第一步能走到的联通块取个min就好了 (我竟然第一发特别认真的写了一个D ...
- Linux安装配置varnish web加速器
Linux安装配置varnish web加速器 Varnish是一款高性能的开源HTTP加速器,它可以来做纯粹的代理服务器,负载均衡,但varnish最主要的功能是缓存加速,也是它最出色的 ...
- Redis---系统学习
1.安装Redis Docker 2.查看Redis配置 进入Docker中的Redis容器: 进入启动命令目录:cd /usr/local/bin/ 启动redis客户端:./redis-cli c ...
- 错误消息对话框QErrorMessage
继承于 QDialog 样式: 这个复选框的作用:文本框中相同信息时是否再显示 import sys from PyQt5.QtWidgets import QApplication, QWi ...
- Day_02-Python的分支结构和循环结构
分支结构 应用场景 迄今为止,我们写的Python代码都是一条一条语句顺序执行,这种结构的代码我们称之为顺序结构.然而仅有顺序结构并不能解决所有的问题,比如我们设计一个游戏,游戏第一关的通关条件是玩家 ...
- Apache启动错误:could not bind to address[::]:443
Q:Windows环境下启动apache报错如下: 可是在httpd.conf文件中apache listen的明明是http 80端口,为什么会报443的错误? A:因为你的计算机安装了VM,所有有 ...
- ARIMA模型--粒子群优化算法(PSO)和遗传算法(GA)
ARIMA模型(完整的Word文件可以去我的博客里面下载) ARIMA模型(英语:AutoregressiveIntegratedMovingAverage model),差分整合移动平均自回归模型, ...
- .NET(c#) 移动APP开发平台 - Smobiler(2) - 平台介绍
看到大家很多人在后台问我一些问题,所以准备写一个系列了,下面给个目录 目录: .NET(c#) 移动APP开发平台 - Smobiler(1) 环境的搭建及上手第一个应用 类似开发WinForm的方式 ...
- D1. Kirk and a Binary String (easy version)
D1. Kirk and a Binary String (easy version) 01串找最长不降子序列 给定字符串s,要求生成一个等长字符串t,使得任意l到r位置的最长不降子序列长度一致 从后 ...