python中字典和集合数据存储的异同分析

1. 字典的简单说明

字典(Dictionary)是Python中一种非常重要和常用的数据结构。以下是字典的主要特点:

  • 字典以键值对(key-value pair)的形式存储数据。每个键(key)是唯一的,键和值(value)之间通过冒号(:)分隔,键值对之间通过逗号(,)分隔。

  • 字典内容是可变的,这意味着可以动态地添加、修改和删除键值对。

  • 字典是基于哈希表实现的,因此查找、插入和删除操作通常具有常数时间复杂度 O 1 O_1 O1这使得字典在处理大量数据时非常高效。

  • 在Python 3.7及更高版本中,字典是有序的(即插入顺序被保留),但在此之前,字典是无序的(哈希表的特性)。这意味着在较早版本中,字典中的元素没有固定的顺序。

  • 字典的键必须是不可变的(immutable),例如字符串、数字或元组。列表和其他可变类型不能作为字典的键(键 被用来计算哈希值,用作索引,所以 键 不能被单独更改)。

  • 字典中是不能出现两个一样的 键 的,键 被用来计算哈希值,用作索引,相同的会导致索引相同。

  • 如下是一个字典的简单示例:

    # 创建一个包含三个键值对的字典dict1 = {"key_1": "val_1","key_2": "val_2","key_3": "val_3"}print(dict1)print(type(dict1))print(dict1["key_1"])print(dict1["key_2"])print(dict1["key_3"])
    
    {'key_1': 'val_3', 'key_2': 'val_3', 'key_3': 'val_3'}
    <class 'dict'>
    val_1
    val_2
    val_3
    

2. 集合的简单说明

集合 和 字典一样使用哈希表存储,直接使用 集合的元素 计算出哈希值作为索引,然后将依据索引将 集合的元素(元素本身) 进行存储,所以,集合具有,如下特点:

  • 集合中的元素是无序的
  • 集合中的元素是唯一的
  • 集合本身是可以动态地添加或删除元素,但集合中的元素必须是不可变的(如字符串、数字、元组)
  • 如下是一个集合的简单示例:
my_set = {1, 2, 3, 4, 5}# 查找元素 3 是否在集合中
print(3 in my_set)  # 输出: True# 查找元素 6 是否在集合中
print(6 in my_set)  # 输出: False
True
False

3. 总结

  • 集合字典 的共性主要在其均采用 哈希表 进行数据存储,区别是 字典 使用 计算哈希值, 而 集合 直接使用元素本身计算哈希值。

4.字典和集合哈希冲突的解决办法

  • 字典(dict)和集合(set)都是通过哈希表实现的,因此它们都需要处理哈希冲突。哈希冲突是指不同的键或元素通过哈希函数计算后得到相同的哈希值,从而映射到哈希表的同一个位置。哈希冲突主要采用开放寻址法(Open Addressing)和 链地址法(Separate Chaining)来解决哈希冲突。

4.1 开放寻址法(Open Addressing)

  • 开放寻址法通过在哈希表中探测下一个可用位置来存储冲突的元素。常见的探测方法包括线性探测、平方探测和多次哈希,工作原理如下:
    • 插入元素:通过哈希函数计算出元素地址的索引。如果该地址已经有元素,则根据 探测方法 查找下一个可用位置,直到找到空地址为止。
    • 查找元素:通过哈希函数计算出元素地址的索引,然后 根据探测方法 查找目标元素,直到找到目标元素或遇到空地址为止。
    • 删除元素:通过哈希函数计算出元素地址的索引,然后 根据探测 方法查找并删除目标元素。

4.2 链地址法(Separate Chaining)

  • 链地址法将每个哈希表元素地址转换为链表来存储冲突的元素。当多个键被哈希到同一个元素地址时,这些键值对会被存储在该元素地址的链表中,工作原理如下:
    • 插入元素:首先通过哈希函数计算出元素地址的索引。如果该地址已经有元素,则将新元素添加到链表的末尾。
    • 查找元素:通过哈希函数计算出元素地址的索引,然后遍历链表查找目标元素。
    • 删除元素:通过哈希函数计算出元素地址的索引,然后遍历链表找到并删除目标元素。

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

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

相关文章

Word Split Line

Word Split Line 分割线 https://download.csdn.net/download/spencer_tseng/89413772

JSON.parse的使用方法和基本定义

JSON.parse()是JavaScript中用于将JSON字符串解析为JavaScript对象的方法。 一、基本用法 JSON.parse()方法接收一个有效的JSON字符串作为参数&#xff0c;返回一个对象或数组。 如果传入的参数不是有效的JSON字符串&#xff0c;则会抛出错误。 二、参数 JSON.parse()方法可…

小柴带你学AutoSar系列一、基础知识篇(5)makefile基础

Flechazohttps://www.zhihu.com/people/jiu_sheng 小柴带你学AutoSar总目录https://blog.csdn.net/qianshang52013/article/details/138140235?spm=1001.2014.3001.5501

国内docker镜像站全军覆没 如何自己部署一个Docker镜像加速服务器?

近日&#xff0c;在使用SJTUG提供的镜像加速拉取镜像的时候死活拉不下来&#xff0c;不管是 docker hub 还是国内的某些镜像站&#xff0c;同样都无法使用&#xff0c;虽然现在还有部分可用的镜像站&#xff0c;但也说不准某一天因为某些原因同样停止提供了&#xff0c;这时候就…

MAC地址简介

一、MAC和ip地址 很多同学只知道ip地址&#xff0c;同时也知道ip在网络通讯中的重要性&#xff0c;实际上要实现网络通信的话&#xff0c;除了ip地址外还需要MAC地址的配合&#xff0c;只有在这两种地址的配合之下才能完整的实现互联网的通信。但是由于MAC地址的使用&#xff0…

华为防火墙配置 SSL VPN

前言 哈喽&#xff0c;我是ICT大龙。本期给大家更新一次使用华为防火墙实现SSL VPN的技术文章。 本次实验只需要用到两个软件&#xff0c;分别是ENSP和VMware&#xff0c;本次实验中的所有文件都可以在文章的末尾获取。话不多说&#xff0c;教程开始。 什么是VPN 百度百科解…

持续总结中!2024年面试必问 20 道分布式、微服务面试题(六)

上一篇地址&#xff1a;持续总结中&#xff01;2024年面试必问 20 道分布式、微服务面试题&#xff08;五&#xff09;-CSDN博客 十一、什么是服务编排和服务编排工具&#xff1f; 服务编排&#xff08;Service Orchestration&#xff09;是一种设计模式&#xff0c;用于管理…

Java核心: 类加载器

这一节我们来学习Java的类加载器&#xff0c;以及常用的类加载器实现URLClassLoader。 1. Java类加载器 类加载器用于将字节码读取并创建Class对象。我们知道JVM本身是用C写的&#xff0c;一开始执行的时候由C程序来加载并引导字节码的运行&#xff0c;这些由C编写的加载字节…

LVGL网格布局测试

一、测试1 static lv_coord_t col_dsc[] = { 80, 80, LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };static lv_coord_t row_dsc[] = { 45, LV_GRID_TEMPLATE_LAST };lv_obj_t* page = lv_img_create(lv_scr_act());lv_obj_center(page);lv_obj_set_size(page, 800, 600);isu_set_ob…

[数据集][目标检测]攀墙攀越墙壁数据集VOC格式-701张

数据集格式&#xff1a;Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件&#xff0c;仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数)&#xff1a;701 标注数量(xml文件个数)&#xff1a;701 标注类别数&#xff1a;1 标注类别名称:["fq"] 每个类别标…

htb-window-2-blue-smb

nmap msf 漏洞搜索 配置 获取flag

归一化在神经网络训练中的作用

归一化是深度学习中的一个重要概念&#xff0c;特别是在神经网络的训练过程中&#xff0c;它起着至关重要的作用。本文将深入探讨归一化在神经网络训练中的意义、不同的归一化方法&#xff0c;以及通过具体例子来说明归一化的实际效果。 一、什么是归一化&#xff1f; 归一化…

36python数据分析numpy基础之setxor1d求两个数组的对称差

1 python数据分析numpy基础之setxor1d求两个数组的对称差 python的numpy库的setxor1d(x,y)函数&#xff0c;表示数组x与y的对称差&#xff0c;即只属于其中一个集合&#xff0c;而不属于另一个集合的元素组成的数组&#xff0c;且进行去重排序。 用法 numpy.setxor1d(ar1, a…

SpringBoot整合钉钉实现消息推送

前言 钉钉作为一款企业级通讯工具&#xff0c;具有广泛的应用场景&#xff0c;包括但不限于团队协作、任务提醒、工作汇报等。 通过Spring Boot应用程序整合钉钉实现消息推送&#xff0c;我们可以实现以下功能&#xff1a; 实时向指定用户或群组发送消息通知。自定义消息内容…

基于关键词自动采集抖音视频排名及互动数据(点赞、评论、收藏)

在当今的社交媒体时代&#xff0c;抖音作为一个热门短视频平台&#xff0c;吸引了大量用户和内容创作者。对于研究和分析抖音上的热门视频及其互动数据&#xff08;如点赞、评论、收藏等&#xff09;&#xff0c;自动化的数据采集工具显得尤为重要。本项目旨在开发一个基于关键…

【架构分析】GPU执行GEMM矩阵运算实例演示

背景介绍 Cutlass是 NVIDIA 提供的一套用于高效实现矩阵乘法和卷积操作的 C 库。它以 CUDA 为基础&#xff0c;提供了高度优化的数学运算&#xff0c;尤其适用于GPU上的高性能并行计算。本文以GEMM矩阵运算作为实例&#xff0c;展示Cutlass在GPU上执行GEMM运算的过程 实例演示…

chatgpt 推荐的一些关于提高认知的书,我先存一下

当然可以&#xff01;以下是一些推荐的书籍&#xff0c;这些书籍涵盖了心理学、认知科学、哲学和个人发展等领域&#xff0c;可以帮助你提升认知能力和批判性思维&#xff1a; 心理学与认知科学 《Thinking, Fast and Slow》 by Daniel Kahneman 这本书探讨了人类思维的两种系…

嵌入式仪器模块:波形发生器模块(嵌入式)

• 16 位分辨率 • 125 MHz 刷新率 • 支持生成 FSK/ASK 信号 应用场景 • 生成任意标准波形或用户自定义波形 • 在特殊协议通信中模拟某个波形 • 无线充电&#xff08;信号调制&#xff09; 道114输出阻抗Low-ZLow-ZLow-Z输出范围 5 V 5 V 6 V耦合DCDCDC带宽4 MHz10 M…

将小爱音箱接入 ChatGPT 和豆包,改造成你的专属语音助手

网址 https://github.com/idootop/mi-gpt 一个ts的项目&#xff0c;看样子是个纯前端的项目。 演示的挺有意思的&#xff0c;傻妞应该是魔幻手机的角色。感觉能用这个例子的&#xff0c;最少得三十而立了。 个人感觉这种项目都是整活加炫技&#xff0c;估计我要用上这东西&…

【UML用户指南】-12-对高级结构建模-接口、类型和角色

目录 1、名称 2、操作 3、关系 4、理解接口 5、常用建模技术 5.1、对系统中的接缝建模 5.2、对静态类型和动态类型建模 5.2.1、对静态类型建模 5.2.2、对动态类型建模 使接口易于理解和易于访问 接口在关于一个抽象做什么的描述与关于这个抽象如何做的实现之间定义了…