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

2024-06-09 12:44

本文主要是介绍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)

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

这篇关于python中 字典 和 集合 数据存储的异同分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1045214

相关文章

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注