当前位置: 首页 > news >正文

Python运维自动化之字典Dict

字典Dict(哈希表)

Dict即Dictionary,也称为mapping。
Python中,字典由任意个元素构成的集合,每一个元素称为Item,也称为Entry。这个Item是由(key, value)组成的二元组。
字典是可变的、无序的、key不重复的key-value键值对集合。

初始化

  • dict(**kwargs) 使用name=value对初始化一个字典
  • dict(iterable, kwarg) 使用可迭代对象和name=value对构造字典,不过可迭代对象的元素必须是一个二元结构**
  • dict(mapping, **kwarg) 使用一个字典构建另一个字典

字典的初始化方法都非常常用,都需要会用

d1 = {}
d2 = dict(),dict({}),dict([]),dict(())
d3 = dict(a=100, b=200)  #{'a': 100, 'b': 200}
d4 = dict(d3) # 构造另外一个字典 #{'a': 100, 'b': 200}
d5 = dict(d4, a=300, c=400)
d6 = dict([('a', 100), ['b', 200], (1, 'abc')], b=300, c=400) #b=300 会重新赋值
d7 = dict({'a':1,'b':100,1:'abc'},a=2,c=300)
# 类方法dict.fromkeys(iterable, value)
d = dict.fromkeys(range(5))   #{0: None, 1: None, 2: None, 3: None, 4: None}
d = dict.fromkeys(range(5), 0) #{0: 0, 1: 0, 2: 0, 3: 0, 4: 0}d1 = dict.fromkeys('abcde', [1]) #{'a': [1], 'b': [1], 'c': [1], 'd': [1], 'e': [1]}
d1['d'] = 4
d1['b'][0] = 2 #{'a': [2], 'b': [2], 'c': [2], 'd': 4, 'e': [2]}

元素访问

  • d[key]

    • 返回key对应的值value

    • key不存在抛出KeyError异常

  • get(key[, default])

    • 返回key对应的值value

    • key不存在返回缺省值,如果没有设置缺省值就返回None

  • setdefault(key[, default])

    • 返回key对应的值value

    • key不存在,添加kv对,value设置为default,并返回default,如果default没有设置,缺省为
      None

d1 = {'a':1,'b':'abc','c':False}
d1['c'] #False   hash定位原理
d1.get('d',[1,2,3]) #[1, 2, 3]
d1 #{'a': 1, 'b': 'abc', 'c': False}
d1.setdefault('d',[1,2,3]) #[1, 2, 3]
d1 #{'a': 1, 'b': 'abc', 'c': False, 'd': [1, 2, 3]}

新增和修改

  • d[key] = value
    • 将key对应的值修改为value
    • key不存在添加新的kv对
  • update([other]) -> None
    • 使用另一个字典的kv对更新本字典
    • key不存在,就添加
    • key存在,覆盖已经存在的key对应的值
    • 就地修改
d = {}
d['a'] = 1
d.update(red=1)
d.update(['red', 2])
d.update({'red':3})d1 = {'a': 100, 'b': 300, 1: 'abc', 'c': 400} #{'a': 100, 'b': 300, 1: 'abc', 'c': 400}
d1.update([('a',123),['b',222]],a=433,d=900,c=12345) #{'a': 433, 'b': 222, 1: 'abc', 'c': 12345, 'd': 900}

删除

  • pop(key[, default])
    • key存在,移除它,并返回它的value
    • key不存在,返回给定的default
    • default未设置,key不存在则抛出KeyError异常
  • popitem()
    • 移除并返回一个任意的键值对
    • 字典为empty,抛出KeyError异常
  • clear()
    • 清空字典
  • del
d1 = {'a': 100, 'b': 300, 1: 'abc', 'c': 400}
del a[1] #{'a': 100, 1: 'abc', 'c': 400}d1.pop('c')
12345d1.clear()

遍历

1、遍历Key

d1 = {'a': 100, 'b': 300, 1: 'abc', 'c': 400}输入:for k in d1.keys():print(k)输出:ab1c    

2、遍历Value

d1 = {'a': 100, 'b': 300, 1: 'abc', 'c': 400}
输入:for k in d1.values():print(k)输出:100300abc400   输入:for k in d1.keys():print(d1[k],d1.get(k))
输出:100 100300 300abc abc400 400     

3、遍历Item

d = {'a': 100, 'b': 300, 1: 'abc', 'c': 400}
输入:for item in d.items():print(item)print(item[0], item[1])    
输出: ('a', 100)a 100('b', 300)b 300(1, 'abc')1 abc('c', 400)c 400        输入:for k,v in d.items():print(k, v)     
输出:a 100b 3001 abcc 400   输入: for k,_ in d.items():print(k)
输出:ab1c    输入: for _,v in d.items():print(v)
输出:100300abc400      

Python3中,keys、values、items方法返回一个类似一个生成器的可迭代对象

  • Dictionary view对象,可以使用len()、iter()、in操作
  • 字典的entry的动态的视图,字典变化,视图将反映出这些变化
  • keys返回一个类set对象,也就是可以看做一个set集合。如果values都可以hash,那么items也可
    以看做是类set对象

Python2中,上面的方法会返回一个新的列表,立即占据新的内存空间。所以Python2建议使用
iterkeys、itervalues、iteritems版本,返回一个迭代器,而不是返回一个copy

遍历与删除

# 错误的做法
d = dict(a=1, b=2, c=3)
for k,v in d.items():print(d.pop(k))

在使用keys、values、items方法遍历的时候,不可以改变字典的size

 while len(d):print(d.popitem())while d:print(d.popitem())

上面的while循环虽然可以移除字典元素,但是很少使用,不如直接clear。

# for 循环正确删除
d = dict(a=1, b=2, c=3)
keys = []
for k,v in d.items():keys.append(k)
for k in keys:d.pop(k)

key

字典的key和set的元素要求一致

  • set的元素可以就是看做key,set可以看做dict的简化版
  • hashable 可哈希才可以作为key,可以使用hash()测试
  • 使用key访问,就如同列表使用index访问一样,时间复杂度都是O(1),这也是最好的访问元素的方式
d = {1 : 0, 2.0 : 3, "abc" : None,  ('hello', 'world', 'python') : "string", b'abc' : '135'
}

有序性

字典元素是按照key的hash值无序存储的。

但是,有时候我们却需要一个有序的元素顺序,Python 3.6之前,使用OrderedDict类可以做到,3.6开 始dict自身支持。到底Python对一个无序数据结构记录了什么顺序?

 # 3.5如下
C:\Python\Python353>python
Python 3.5.3 (v3.5.3:1880cb95a742, Jan 16 2017, 16:02:32) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> d = {'a':300, 'b':200, 'c':100, 'd':50}
>>> d
{'c': 100, 'a': 300, 'b': 200, 'd': 50}
>>> d
{'c': 100, 'a': 300, 'b': 200, 'd': 50}
>>> list(d.keys())
['c', 'a', 'b', 'd']
>>> exit()
C:\Python\Python353>python
Python 3.5.3 (v3.5.3:1880cb95a742, Jan 16 2017, 16:02:32) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> d = {'a':300, 'b':200, 'c':100, 'd':50}
>>> d
{'b': 200, 'c': 100, 'd': 50, 'a': 300}

Python 3.6之前,在不同的机器上,甚至同一个程序分别运行2次,都不能确定不同的key的先后顺序。

 # 3.6+表现如下
C:\Python\python366>python
Python 3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 03:37:03) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> d = {'c': 100, 'a': 300, 'b': 200, 'd': 50}
>>> d
{'c': 100, 'a': 300, 'b': 200, 'd': 50}
>>> exit()
C:\Python\python366>python
Python 3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 03:37:03) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> d = {'c': 100, 'a': 300, 'b': 200, 'd': 50}
>>> d
{'c': 100, 'a': 300, 'b': 200, 'd': 50}
>>> d.keys()
dict_keys(['c', 'a', 'b', 'd'])

Python 3.6+,记录了字典key的录入顺序,遍历的时候,就是按照这个顺序。

如果使用d = {‘a’:300, ‘b’:200, ‘c’:100, ‘d’:50},就会造成以为字典按照key排序的错觉。

目前,建议不要3.6提供的这种字典特性,还是以为字典返回的是无序的,可以在Python不同版本中考 虑使用OrderedDict类来保证这种录入序。

相关文章:

Python运维自动化之字典Dict

字典Dict(哈希表) Dict即Dictionary,也称为mapping。 Python中,字典由任意个元素构成的集合,每一个元素称为Item,也称为Entry。这个Item是由(key, value)组成的二元组。 字典是可变的、无序的、key不重复的key-value键值对集合。…...

axios请求拦截器和响应拦截器,封装naive-ui的 Loading Bar加载条和useMessage消息提示

接之前的博客设计从0开始边做边学,用vue和python做一个博客,非规范化项目,怎么简单怎么弄,跑的起来有啥毛病解决啥毛病(三),目前已经完成了基本的功能demo,但是请求接口不可能每个页…...

9.Python 条件语句和循环语句

文章目录 Python 条件语句和循环语句1. **条件语句 (Conditional Statements)**1.1 if 语句1.2 if-else 语句1.3 if-elif-else 语句 2. **循环语句 (Loop Statements)**2.1 while 循环2.2 for 循环2.3 循环嵌套 (Nested Loops) 3. **控制循环的语句**3.1 break 语句3.2 continu…...

智能家居控制系统设计

设计智能家居控制系统是一个复杂但有趣的项目,它涉及硬件与软件的集成、网络通信、用户界面设计等多个方面。以下是一个智能家居控制系统的基本设计思路: 1. 需求分析- 功能需求:明确系统需要实现的功能,如灯光控制、空调温度调节…...

Windows系统word插入公式自动编号并交叉引用

一、定义新的多级列表 鼠标单击页面空白处 二、插入域 鼠标单击要插入公式编号的地方 三、交叉引用 鼠标单击要引用公式编号的地方 四、更新编号(域) CtrlA:全选全文 鼠标右键:更新域...

0.基础语法

文章目录 1. 第一个 Python 程序2. Python2.x 和 Python3.x 的差异3. 标识符和保留字符4. 行和缩进5. 多行语句6. 引号7. 注释8. 空行9. 用户输入10. Print 输出11. 代码组12. 命令行参数 Python 基础语法涵盖了从安装和运行 Python 程序到理解语言核心概念的各个方面。以下是基…...

mysql命令行界面(黑框)的登录

文章目录 开启关闭服务报错登录mysql退出mysql数据据database在电脑中的存放位置删除数据库语句 drop注意 cmd用管理员打开 开启关闭服务 报错 我有这个报错,但是使用没什么影响 登录mysql root替换成自己的用户名 退出mysql exit 数据据database在电脑中的…...

【机器学习】解构概率,重构世界:贝叶斯定理与智能世界的暗语

文章目录 条件概率与贝叶斯定理:深入理解机器学习中的概率关系前言一、条件概率与贝叶斯定理1.1 条件概率的定义与公式1.1.1 条件概率的定义1.1.2 条件概率的实例讲解 1.2 条件概率的性质与法则1.2.1 链式法则1.2.2 全概率公式1.2.3 贝叶斯定理的推导 1.3 贝叶斯定理…...

threejs——无人机概念切割效果

主要技术采用着色器的切割渲染,和之前写的风车可视化的文章不同,这次的切割效果是在着色器的基础上实现的,并新增了很多可调节的变量,兄弟们,走曲儿~ 线上演示地址,点击体验 源码下载地址,点击下载 正文 从图中大概可以看出以下信息,一个由线组成的无人机模型,一个由…...

electron学习笔记(一)

1.创建项目 mkdir myelectron npm init npm install --save-dev electron //安装通过以上命令, 我们就有了一个 electron 的项目 之后, 设置主文件入口 , 添加热启动 nodemon 2. nodemon 的使用和配置 要根目录下添加 nodemon.json 文件,配…...

基于Arduino蹲便器的自动清洁系统(论文+源码)

1系统整体设计 经过上述的方案分析,最终确定了Arduino UNO开发板为核心,结合蓝牙模块,舵机,电磁阀,红外传感器,步进电机,舵机等硬件设备来构成整个控制系统,整体框图如图2.1所示。其…...

【JavaWeb后端学习笔记】使用HttpClient发送Http请求

使用HttpClient发送Http请求需要在项目中导入相关依赖&#xff1a; <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version> </dependency>1、 HttpClient…...

2024告别培训班 数通、安全、云计算、云服务、存储、软考等1000G资源分享

大类有&#xff1a;软考初级 软考中级 软考高级 华为认证 华三认证&#xff1a; 软考初级&#xff1a; 信息处理技术员 程序员 网络管理员 软考中级&#xff1a; 信息安全工程师 信息系统监理师 信息系统管理工程师 嵌入式系统设计时 数据库系统工程师 电子商务设…...

【C++】- 掌握STL List类:带你探索双向链表的魅力

文章目录 前言&#xff1a;一.list的介绍及使用1. list的介绍2. list的使用2.1 list的构造2.2 list iterator的使用2.3 list capacity2.4 list element access2.5 list modifiers2.6 list的迭代器失效 二.list的模拟实现1. list的节点2. list的成员变量3.list迭代器相关问题3.1…...

基于streamlit搭简易前端页面

前端小白第一次用streamlit搭简易页面&#xff0c;记录一下。 一些tips 每次与页面进行交互&#xff0c;如点击按钮、上传文件等&#xff0c;streamlit就会重新运行整个页面的所有代码。如果在页面渲染前需要对上传文件做很复杂的操作&#xff0c;重新运行所有代码就会重复这…...

Harmony Next开发通过bindSheet绑定半模态窗口

示例概述 Harmony Next开发通过bindSheet绑定半模态窗口 知识点 半模态窗口父子组件传值 组件 LoginComponent Component struct LoginComponent {// Prop 父子单项绑定值Prop message:string // Link 父子双向绑定值Link userName:stringLink password:stringLink isSh…...

YOLOv11改进,YOLOv11添加DLKA-Attention可变形大核注意力,WACV2024 ,二次创新C3k2结构

摘要 作者引入了一种称为可变形大核注意力 (D-LKA Attention) 的新方法来增强医学图像分割。这种方法使用大型卷积内核有效地捕获体积上下文,避免了过多的计算需求。D-LKA Attention 还受益于可变形卷积,以适应不同的数据模式。 理论介绍 大核卷积(Large Kernel Convolu…...

【51单片机】矩阵按键快速上手

51单片机矩阵按键是一种在单片机应用系统中广泛使用的按键排列方式&#xff0c;特别适用于需要多个按键但I/O口资源有限的情况。以下是对51单片机矩阵按键的详细介绍&#xff1a; 一、矩阵按键的基本概念 ‌定义‌&#xff1a;矩阵按键&#xff0c;又称行列键盘&#xff0c;是…...

一文说清:git reset HEAD原理

1 使用add命令&#xff0c;将文件添加到暂存区 命令如下&#xff1a; 对比结果如下&#xff1a; 2 使用reset HEAD命令 如下&#xff1a; 结果对比如下&#xff1a; 忽略logs目录下的内容。 发现只是修改了index暂存区的内容。删掉了原来添加到暂存区的对象ID&#x…...

【前端面试题】书、定位问题、困难

看过什么书 《JavaScript 高级程序设计&#xff08;第 4 版&#xff09;》&#xff08;作者&#xff1a;Matt Frisbie&#xff09; 这是一本深入学习 JavaScript 语言的经典书籍。它详细地涵盖了 JavaScript 的高级特性&#xff0c;包括原型链、闭包、异步编程等复杂概念。以闭…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...