闲话Python编程-字典dict

        在我的Python编程经历中,Python有两大最常用的数据结构:列表list和字典dict,搞明白了这两个数据结构的所有知识点,日常编程基本不成问题了。列表list在前面专题已经详细讲过,本章来着重讲解字典dict的用法。

1. 定义与创建

        字典dict是一个映射的类型, 它也是一个容器,容器里面是一个个key和value的映射对象,比如:{100: 'aaaa',  200: 'bbb'} 或者 {'Tom':  20, 'Jack': 21}。

        字典dict的key需要是一个可Hashable的对象,这需要去了解Hash是什么:

        Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。比如把字符文本映射为一个整型值,或者把任意长度的文本映射成一个固定长度的字符串,在文件下载时我们常常会发现同时提供了一个文件Hash值,就是让我们下载完文件后对文件内容做Hash,以便和下载网站提供的Hash值进行对比来判断下载文件是否完整。

        是不是Python里面所有对象都是可Hashable的呢,不是!一个对象是可Hashable的,那是需要它实现了__hash__()内置函数,在它的生命周期内它的Hash值是不会变的。这么讲还是比较抽象,那直接从实际例子中讲:

  1.  大部分Python不可修改的内嵌对象都是可Hashable的:比如整型值,字符串。
  2.  不可修改的容器tuple和frozenset是可Hashable,当然同时还需要它们的元素是可Hashable的。
  3.  用户定义的类实例,默认也是可Hashable的。
  4. 反之,可修改的容器如list和dict就不是可Hashable的。

        字典dict对key要求是可Hashable的,对value值却不需要,任何对象都可以。

        我们来看看字典dict的几种创建方式:

  1. 用冒号分隔的key:value列表:{100: 'aaaa',  200: 'bbb'}、{'Tom':  20, 'Jack': 21}
  2. 空字典:{}
  3. 用for循环构造:{x: x ** 2 for x in range(10)}
  4. 用内置函数dict()进行构造:

         dict()

   dict([('foo', 100), ('bar', 200)])

   dict(foo=100, bar=200)

   dict({'one': 1, 'three': 3}, two=2)

         dict(zip(['one', 'two', 'three'], [1, 2, 3]))

        最后来一点测试验证代码:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 练习dict# 创建dict
def create_dict():d1 = {}print('d1:', d1)d2 = dict()print('d2:', d2)d3 = {100: 'aaaa', 200: 'bbb'}print('d3:', d3)d4 = {x: x ** 2 for x in range(10)}print('d4:', d4)d5 = dict(one=1, two=2, three=3)print('d5:', d5)d6 = dict([('one', 1), ('two', 2), ('three', 3)])print('d6:', d6)d7 = dict({'one': 1, 'two': 2}, three=3)print('d7:', d7)d8 = dict(zip(['one', 'two', 'three'], [1, 2, 3]))print('d8:', d8)def main():create_dict()if __name__ == '__main__':main()

2. 操作

        字典dict也是一个容器类型,里面存储管理键值对的元素,基础的操作必定是增、删、查、改。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 练习dict# 创建dict
def create_dict():d1 = {}print('d1:', d1)d2 = dict()print('d2:', d2)d3 = {100: 'aaaa', 200: 'bbb'}print('d3:', d3)d4 = {x: x ** 2 for x in range(10)}print('d4:', d4)d5 = dict(one=1, two=2, three=3)print('d5:', d5)d6 = dict([('one', 1), ('two', 2), ('three', 3)])print('d6:', d6)d7 = dict({'one': 1, 'two': 2}, three=3)print('d7:', d7)d8 = dict(zip(['one', 'two', 'three'], [1, 2, 3]))print('d8:', d8)# 操作dict
def operate_dict():info = {'Jack': 15, 'Tom': 16}print(info)# 新增: key不存在info['Alic'] = 14print(info)# 修改: key已经存在info['Jack'] = 17print(info)# 删除del info['Jack']print(info)# 判断元素是否存在if 'Alic' in info:print('Alic is in ', info)if 'Black' not in info:print('Black is not in ', info)# 获取指定key的值,如果key不存在,则执行抛出异常KeyErrorx = info['Alic']print("info['Alic']=", x)# 同样是获取值,但是当key不存在时,会返回None, 而不会异常x = info.get('Jack')print("info['Jack']=", x)# 遍历for k, v in info.items():print('key=', k, ', value=', v)for k in info.keys():print('key=', k)for v in info.values():print('value=', v)# 清空info.clear()print(info)def main():#create_dict()operate_dict()if __name__ == '__main__':main()

        上面代码中operate_dict()函数把常见的操作练习了一遍,dict还有其它的方法,使用很简单,自行查官网资料。

3. 结束语

        Python语言库支持的数据结构最重要最常用的就是序列和字典两个了,用好了它们基本解决了大部分的数据结构需求,字典dict适合具有键值映射关系的数据结构需求的场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/147792.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

小谈设计模式(14)—建造者模式

小谈设计模式(14)—建造者模式 专栏介绍专栏地址专栏介绍 建造者模式角色分类产品(Product)抽象建造者(Builder)具体建造者(Concrete Builder)指挥者(Director&#xff0…

Java之SpringCloud Alibaba【六】【Alibaba微服务分布式事务组件—Seata】

一、事务简介 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。 在关系数据库中,一个事务由一组SQL语句组成。 事务应该具有4个属性: 原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。 原子性(atomicity) ∶个事务…

Selenium上传文件有多少种方式?不信你有我全

Selenium 封装了现成的文件上传操作。但是随着现代前端框架的发展,文件上传的方式越来越多样。而有一些文件上传的控件,要做自动化控制会更复杂一些,这篇文章主要讨论在复杂情况下,如何通过自动化完成文件上传 1.input 元素上传文…

国庆作业6

TCP服务器 #include "head.h" #define PORT 2580 //端口号 #define IP "192.168.31.219" //本机IP int main(int argc, const char *argv[]) {sqlite3* dbNULL;if(sqlite3_open("./my.db",&db)!SQLITE_OK){fprintf(stde…

Python大数据之PySpark(四)SparkBaseCore

文章目录 SparkBase&Core环境搭建-Spark on YARN扩展阅读-Spark关键概念[了解]PySpark角色分析[了解]PySpark架构后记 SparkBase&Core 学习目标掌握SparkOnYarn搭建掌握RDD的基础创建及相关算子操作了解PySpark的架构及角色 环境搭建-Spark on YARN Yarn 资源调度框…

面试题:熟悉设计模式吗?谈谈简单工厂模式和策略模式的区别

刚刚接触设计模式的时候,我相信单例模式和工厂模式应该是用的最多的,毕竟很多的底层代码几乎都用了这些模式。自从接触了一次阿里的公众号发的一次文章关于 DDD的使用 以后,就逐渐接触了策略模式。现在在项目中运用最多的也是这几种设计模式了…

【深蓝学院】手写VIO第4章--基于滑动窗口算法的 VIO 系统:可观性和 一致性--笔记

0. 内容 T1. 参考SLAM14讲P247直接可写,注意 ξ 1 , ξ 2 \xi_1,\xi_2 ξ1​,ξ2​之间有约束(关系)。 套用舒尔补公式: marg掉 ξ 1 \xi_1 ξ1​之后,信息被传递到 L 1 和 L 2 L_1和L_2 L1​和L2​之间了。 T2.

趋势列表上又多了两个漏洞!

CVE-2023-24955 和 CVE-2023-29360 来自微软产品 5 月和 6 月的安全补丁报告。它们之所以特别危险,是因为出现了公开漏洞利用。 以下是详细信息。 第一个漏洞 CVE-2023-24955存在于 Microsoft SharePoint Server 中。它可导致远程代码执行。 它与覆盖随后由服务器执…

匿名上位机V7波形显示教程-简单能用

匿名上位机V7波形显示教程-简单能用 匿名上位机V7下位机数据格式根据匿名上位机V7的手册说明文档,编写对应的指令在主函数中初始化ANDmessage驱动连接匿名上位机V7 匿名上位机V7下位机数据格式 DATA区域内容: 举例说明DATA区域格式,例如上文&…

选择排序算法:简单但有效的排序方法

在计算机科学中,排序算法是基础且重要的主题之一。选择排序(Selection Sort)是其中一个简单但非常有用的排序算法。本文将详细介绍选择排序的原理和步骤,并提供Java语言的实现示例。 选择排序的原理 选择排序的核心思想是不断地从…

NestJs和Vite使用monorepo管理项目中,需要使用共享的文件夹步骤

NestJs和Vite使用monorepo管理项目中,需要使用共享的文件夹步骤 1 首先需要将nest-cli打包的功能通过webpack接管 nest-cli.json文件内容 {"$schema": "https://json.schemastore.org/nest-cli","collection": "nestjs/schematics",…

FPGA project : TFT_LCD

实验目标: 驱动TFT_LCD显示十色彩条。 重点掌握的知识: 1,液晶显示器,简称LCD(Liquid Crystal Display),相对于上一代CRT显示器(阴极射线管显示器),LCD显示器具有功耗低、体积小、承载的信息量大及不伤眼…

Python入门教程48:Pycharm永久镜像源的pip配置方法

国内几个好用的Python镜像服务器地址: 清华大学镜像站:https://pypi.tuna.tsinghua.edu.cn/simple/阿里云镜像站:https://mirrors.aliyun.com/pypi/simple/中科大镜像站:https://pypi.mirrors.ustc.edu.cn/simple/中国科技大学镜…

入门运维之MySQL管理

一、系统数据库 Mysql数据库安装完成后,自带了以下四个数据库,具体作用如下: 1.1常用工具 1.1.1 mysql 该mysql不是指mysql服务,而是指mysql的客户端工具。 语法 :mysql [options] [database] 选项 :-u, --user=name #指定用户名-p, --password[=name] #指定密码-h,…

若依不分离+Thymeleaf select选中多个回显

项目中遇到的场景&#xff0c;亲测实用 表单添加时&#xff0c;select选中多个&#xff0c;编辑表单时&#xff0c;select多选回显&#xff0c;如图 代码&#xff1a; // 新增代码 <label class"col-sm-3 control-label">通道&#xff1a;</label><…

博途SCL区间搜索指令(判断某个数属于某个区间)

S型速度曲线行车位置控制,停靠位置搜索功能会用到区间搜索指令,下面我们详细介绍区间搜索指令的相关应用。 S型加减速行车位置控制(支持点动和停车位置搜索)-CSDN博客S型加减速位置控制详细算法和应用场景介绍,请查看下面文章博客。本篇文章不再赘述,这里主要介绍点动动和…

二十六、设置时序电路初始状态的方法(初始值设置)(时序电路置数)2

方法2 在理解方法1的化简(1)这个方法后,又可以想到输入触发器R和S两个输入端的信号也无非就是0和1。那么直接用LOAD这个信号接在R和S两个输入端上即可。 先用开关判断触发器的R和S是低电平触发还是高电平触发(下图触发器可以直接看出为低电平触发,但是实际用管子搭建的触…

Jmeter+jenkins接口性能测试平台实践整理

最近两周在研究jmeter&#xff0b;Jenkin的性能测试平台测试dubbo接口&#xff0c;分别尝试使用maven&#xff0c;ant和Shell进行构建&#xff0c;jmeter相关设置略。 一、Jmeterjenkins&#xff0b;Shell&#xff0b;tomcat 安装Jenkins,JDK,tomcat,并设置环境变量&#xff0…

Flutter+SpringBoot实现ChatGPT流实输出

FlutterSpringBoot实现ChatGPT流式输出、上下文了连续对话 最终实现Flutter的流式输出上下文连续对话。 这里就是提供一个简单版的工具类和使用案例&#xff0c;此处页面仅参考。 服务端 这里直接封装提供工具类&#xff0c;修改自己的apiKey即可使用&#xff0c;支持连续…

BASH shell脚本篇5——文件处理

这篇文章介绍下BASH shell中的文件处理。之前有介绍过shell的其它命令&#xff0c;请参考&#xff1a; BASH shell脚本篇1——基本命令 BASH shell脚本篇2——条件命令 BASH shell脚本篇3——字符串处理 BASH shell脚本篇4——函数 在Bash Shell脚本中&#xff0c;可以使用…