6.1Python之字典的初识

【1】字典的创建与价值

        字典(Dictionary)是一种在Python中用于存储和组织数据的数据结构。元素由键和对应的值组成。其中,键(Key)必须是唯一的,而值(Value)则可以是任意类型的数据。在 Python 中,字典使用大括号{}来表示,键和值之间使用冒号:进行分隔,多个键值对之间使用逗号,分隔。

列表与字典的表达方式:

# 列表
info_list = ["feiyi", 99, 188, 86]
# 字典: {key : value}
info_dict = {"name": "feiyi", "age": 99, "height": 188, "weight": 86} 
print(type(info_dict))  # <class 'dict'>

        字典类型很像学生时代常用的新华字典。我们知道,通过新华字典中的音节表,可以快速找到想要查找的汉字。其中,字典里的音节表就相当于字典类型中的键,而键对应的汉字则相当于值。

fei : 飞

yi  : 燚

字典的灵魂:

字典是由一个一个的 key-value 构成的,字典通过键而不是通过索引来管理元素。字典的操作都是通过 key 来完成的。

info_dict = {"name": "feiyi", "age": 99, "height": 188, "weight": 86}
print(info_dict["name"])# feiyi

【2】字典的存储与特点

hash:百度百科

Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

字典对象的核心其实是个散列表,而散列表是一个稀疏数组(不是每个位置都有值),每个单元叫做bucket,每个bucket有两部分:一个是键对象的引用,一个是值对象的引用,由于,所有bucket结构和大小一致,我们可以通过偏移量来指定bucket的位置。

将一对键值放入字典的过程:

        先定义一个字典,再写入值:

d = {} 
d["name"] = "fei"

        在执行第二行时,第一步就是计算"name"的散列值,python中可以用hash函数得到hash值,再将得到的值放入bin函数,返回int类型的二进制:

print(bin(hash("name")))

结果为:

-0b100000111110010100000010010010010101100010000011001000011010

         假设数组长度为10,我们取出计算出的散列值,最右边3位数作为偏移量,即010,十进制是数字2,我们查看偏移量为2对应的bucket的位置是否为空,如果为空,则将键值放进去,如果不为空,依次取右边3位作为偏移量011,十进制是数字3,再查看偏移量3的bucket是否为空,直到单元为空的bucket将键值放进去。以上就是字典的存储原理。

当进行字典的查询时:

d["name"]
d.get("name") 

        第一步与存储一样,先计算键的散列值,取出后三位010,十进制为2的偏移量,找到对应的bucket的位置,查看是否为空,如果为空就返回None,不为空就获取键并计算键的散列值,计算后将刚计算的散列值与要查询的键的散列值比较,相同就返回对应bucket位置的value,不同就往前再取三位重新计算偏移量,依次取完后还是没有结果就返回None

此外,

print(bin(hash("name")))每次执行结果不同:

这是因为 Python 在每次启动时,使用的哈希种子(hash seed)随机选择的。哈希种子的随机选择是为了增加哈希函数的安全性和防止潜在的哈希碰撞攻击。

字典的特点:

  1. 无序性:字典中的元素没有特定的顺序,不像列表和元组那样按照索引访问。通过键来访问和操作字典中的值。
  2. 键是唯一的且不可变类型对象,用于标识值。值可以是任意类型的对象,如整数、字符串、列表、元组等。
  3. 可变性:可以向字典中添加、修改和删除键值对。这使得字典成为存储和操作动态数据的理想选择。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ue4打包多模块

首先&#xff0c;每个模块&#xff0c;包含插件内的模块在内&#xff0c;都要用IMPLEMENT_MODULE(类名, 模块名)的方式&#xff0c;模块名就是带.build.cs的第一个单词。 build.cs里就说了这个模块该怎么用&#xff0c;用c#编写。 打包中要考虑到target.cs,将工程中相应的模块…

花花省V6淘宝客APP社交电商自营商城聚合优惠券系统

首页广告位、淘口令识别、微信登录、淘宝登录、淘宝返佣、拼多多返佣、京东返佣、唯品会返佣、热销榜、聚划算、天猫超市、9.9包邮、品牌特卖、新人攻略 、小米有品、优惠加油、阿里巴巴、去哪网、电影票、飞猪旅行、美团酒店、当当网、肯德基、热门抖货、商品推荐、商品详情、…

基于Springboot + vue +MySQL 留守儿童爱心网站 (含源码)

目录 &#x1f4da; 前言 &#x1f4d1;摘要 &#x1f4d1;系统架构 &#x1f4da; 数据库设计 &#x1f4ac; 志愿活动属性图 &#x1f4ac; 爱心捐赠实体属性 &#x1f4da; 系统功能的具体实现 &#x1f4ac; 系统功能模块 宣传新闻 志愿活动 &#x1f4ac; 管理员功…

基于java+springboot+vue实现的售楼管理系统(文末源码+Lw)23-255

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本售楼管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&a…

312_C++_QT表格的剪切、拷贝、粘贴,轻量化操作

:拷贝 + 粘贴 :剪切 + 粘贴 void CustomTableWidget::cut() {copy();// 获取所有选定的单元格项QList<QTableWidgetItem*> selectedItemsList

SpringBoot学习之Kibana下载安装和启动(三十二)

一、简介 Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。你可以用kibana搜索、查看存放在Elasticsearch中的数据。Kibana与Elasticsearch的交互方式是各种不同的图表、表格、地图等,直观的展示数据,从而达到高级的数据分析与可视化的目的。 …

Java springmvc 参数名用is开头导致为null

因为最近在整理一些源码和编写规范&#xff0c;这里写一下只是记录几年前自己遇到的问题&#xff0c;好久都忘了&#xff0c;还是写下来比较好。 问题记录&#xff1a;由于变量使用了boolean&#xff0c;并且变量名是is开头的&#xff0c;由于java机制boolean默认是false&#…

iview4.x中实现表格列拖拽|左右拖动|点击标题移动|iview拖拽后数据变化但是标题未变

1、sortablejs npm install sortablejs --save 2、引入 import Sortable from sortablejs 3、 mounted mounted() { this.columnDrop() }, 4、mothods columnDrop() { let tbody document.querySelector(.ivu-table-header tr) let _this this Sortable.create(tbody, { onEn…

粉笔精品班面试笔记(一)

1.社会现象 审题方法 1、审设问剖析问法&#xff0c;明确作答重点 2、审题干明确核心&#xff0c;判断现象性质 解题思路 提观点&#xff1a;基本看法 重分析&#xff1a; 正面现象&#xff0c;意义——好上加好 负面现象&#xff0c;危害、原因——解决问 抓落实&#xff…

FASTAPI系列 20-异常处理器exception_handler

FASTAPI系列 20-异常处理器exception_handler 文章目录 FASTAPI系列 20-异常处理器exception_handler前言一、HTTPException 异常&#xff1f;二、覆盖默认的HTTPException 异常三、覆盖请求验证异常RequestValidationError 源码分析 总结更多内容&#xff0c;请关注公众号 前言…

GET与POST:详述HTTP两大请求方法的语义、数据处理机制、安全特性与适用场景

GET和POST方法在HTTP请求中具有明确的角色分工和特性差异。GET适用于读取操作和不敏感数据的传递&#xff0c;强调可缓存性和安全性&#xff0c;而POST适用于写入操作和敏感数据的提交&#xff0c;提供了更大的数据承载能力和更强的隐私保护。本文详细介绍了GET与POST请求方法的…

多张固定宽度元素,随着屏幕尺寸变化自动换行

背景&#xff1a;多张固定宽度元素&#xff0c;随着屏幕尺寸变化自动换行实现&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevic…

多协议接入视频汇聚EasyCVR平台vs.RTSP安防视频EasyNVR平台:设备分组的区别

EasyCVR视频融合云平台则是旭帆科技TSINGSEE青犀旗下支持多协议接入的视频汇聚融合共享智能平台。平台可支持的接入协议比EasyNVR丰富&#xff0c;包括主流标准协议&#xff0c;有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海…

MySQL与Navicat相关

mysql中find_in_set的用法&#xff1f; FIND_IN_SET 是 MySQL 中的一个函数&#xff0c;用于在逗号分隔的字符串列表中查找指定值&#xff0c;并返回其在列表中的位置&#xff08;索引&#xff09;&#xff0c;如果找不到则返回 0。其语法如下&#xff1a; FIND_IN_SET(searc…

强行让Java和Go对比一波[持续更新2024-04-10已更新]

概述 很多Java开发如果想转Golang的话&#xff0c;比较让Java开发蛋疼的第一是语法&#xff0c;第二是一些思想和设计哲学的Gap&#xff0c;所以我这儿强行整理一波Java和Golang的对比&#xff0c;但是由于GO和Java在很多方面都有不同的设计&#xff0c;所以这些对比的项可以更…

Java 集合Collection

集合的体系 Collection的结构体系 List系列集合&#xff1a;添加的元素是有序的、可重复、有索引。Set系列集合&#xff1a;无序、不重复、无索引 HashSet&#xff1a;无序、不重复、无索引LinkedHashSet:有序、不重复、无索引TreeSet&#xff1a;按照大小默认升序排序、不重复…

VueRouter使用,界面切换

一、安装 vue-router3&#xff0c;4分别对应vue2&#xff0c;3.。我现在用的是vue2&#xff0c; npm install vue-router3二、使用 ①首先在component路径下提前写好需要渲染的组件。 ②在App.vue中使用router声明路由。其中router-link的to指明渲染哪一个组件。router-view…

类与对象\友元

最前面加上关键字 friend友元是单向的&#xff0c;不具有交换性 实现互访需要两个类都将对方声明为自己的友元类 友元关系不具备传递性使用友元可以避免频繁调用类的接口函数&#xff0c;提高效率&#xff0c;节省开销 3种形式 友元函数&#xff1a;不属于任何类的普通函数友…

SpringBoot项目在yml或者properties文件中使用环境变量

在 application.yml 或者 application.properties 值的位置随便写这样的语法就可以替换文本 ${MYSQL_URL:192.168.0.100}比如 datasource:type: com.alibaba.druid.pool.DruidDataSourcedriverClassName: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://${MYSQL_URL:192.168.0.10…

​智己舆论战完败

阅读本文大概需要 1.41 分钟 智己汽车跟小米汽车双方在社交媒体上的交锋&#xff0c;想必大家这两天应该有所耳闻&#xff0c;具体情况是这样的&#xff1a;智己发布新车 L6&#xff0c;对标小米 SU7&#xff0c;其中有一项对小米 SU7 的参数标注错误。于是小米发文要求其道歉&…