笔记6——字典dict(dictionary)

文章目录

  • 字典dict(dictionary)
    • 定义
    • 特点
    • 常用操作
      • 1.访问值
      • 2.添加键值对
      • 3.修改值
      • 4.删除键值对
      • 5.遍历字典
      • 6.合并字典
    • 性能
    • 应用场景
    • dict和list的区别

字典dict(dictionary)

键 - 值对 (key - value pairs)的形式存储数据

定义

  • 字典使用花括号 {} 来定义,键和值之间用冒号 分隔,不同键值对之间用逗号 , 分隔
  • 也可以通过 dict() 函数定义
# 直接使用{}定义
my_dict = {'name':'echo','age':'24','city':'shanghai'}
# 使用 dict() 函数定义
my_dict2 = dict(name='echo',age='24',city='shanghai')print(my_dict)
print(my_dict2)

在这里插入图片描述

特点

  • 无序性 :键值对没有特定的顺序,不能通过索引来访问,只能通过键来访问对应的值
  • 字典的可变性 :可以添加、删除或修改字典中的键值对
  • 键的唯一性 :键是唯一的,如果多次赋值,会覆盖;
  • 键的不可变性 :dict通过key计算位置的算法即为哈希算法Hash,dict的key必须是不可变对象,如字符串、整数等;但列表list可变,不可作为key

常用操作

1.访问值

  • 通过方括号 [ ]
    如果键不存在,会抛出keyError异常
my_dict = {'name':'echo','age':'24','city':'shanghai'}value1 = my_dict['name']
#value_test = my_dict['test']#如果键不存在,会抛出keyError异常
print(value1)
#print(value_test)

在这里插入图片描述

  • 通过 get() 方法
    如果键不存在,会返回 None ,或者自己 指定的value
my_dict = {'name':'echo','age':'24','city':'shanghai'}value2 = my_dict.get('city')
value3 = my_dict.get('mood')#如果键不存在,会返回None,或者自己指定的value
value4 = my_dict.get('mood','happy')
print(value2)
print(value3)
print(value4)

在这里插入图片描述

  • 通过 in 判断key是否存在
my_dict = {'name':'echo','age':'24','city':'shanghai'}
print('mood' in my_dict)

在这里插入图片描述

2.添加键值对

直接使用 [ ] 赋值来添加新的键值对

my_dict = {'name':'echo','age':'24','city':'shanghai'}
my_dict['wealth'] = 'priceless'
print(my_dict['wealth'])

在这里插入图片描述

3.修改值

通过指定键来修改对应的值

my_dict = {'name':'echo','age':'24','city':'shanghai'}
print(my_dict)my_dict['age'] = 1
print(my_dict['age'])

在这里插入图片描述

4.删除键值对

  • 使用 del 关键字
    使用 del 语句根据键删除对应的键值对,如果键不存在,会抛出KeyError异常
my_dict = {'name':'echo','age':'24','city':'shanghai'}del my_dict['age']
print (my_dict)
# del my_dict['mood'] #如果键不存在,会抛出KeyError异常

在这里插入图片描述

  • 使用 pop() 方法
    pop() 方法根据键删除对应的键值对,并 返回该键对应的值 ,如果键不存在且未指定默认值,会引发 KeyError
my_dict = {'name':'echo','age':'24','city':'shanghai'}value = my_dict.pop('city')
print(value)
print(my_dict) #dict内部存放的顺序和key放入的顺序是没有关系的

在这里插入图片描述

5.遍历字典

  • 遍历键
    通过 keys() 方法遍历键
my_dict = {'name':'echo','age':'24','city':'shanghai'}for key in my_dict.keys():print(key)

在这里插入图片描述

  • 遍历值

使用 values() 方法遍历值

my_dict = {'name':'echo','age':'24','city':'shanghai'}for value in my_dict.values():print(value)

在这里插入图片描述

  • 遍历键值对
    使用 items() 方法遍历键值对
my_dict = {'name':'echo','age':'24','city':'shanghai'}for key,value in my_dict.items():print(f'{key}:{value}')

在这里插入图片描述

6.合并字典

可以使用 update() 方法将一个字典的键值对合并到另一个字典中

dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
dict1.update(dict2)
print(dict1)  # 输出: {'a': 1, 'b': 3, 'c': 4}

在这里插入图片描述

性能

  • 查找:字典的查找操作平均时间复杂度为 O(1) ,因为底层使用 () 哈希表实现
  • 插入/删除:插入和删除操作的平均时间复杂度也是 O(1)

应用场景

  • 存储配置信息:将各种配置参数以键值对的形式存储在子典中,方便读取和修改
  • 统计词频:同此出现的次数
  • 缓存数据:将计算结果或者从数据库查询到的数据存储到字典中,以提高后续访问速度

dict和list的区别

1. dict

  • 查找和插入的速度极快,不会随着key的增加而慢
  • 需要占用大量的内存,内存耗费大
    2. list
  • 查找和插入的时间随着元素的增加而增加
  • 占用空间小,浪费内存很少

所以, dict是用空间来换取时间的一种方法

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

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

相关文章

编译和链接【四】链接详解

文章目录 编译和链接【四】链接详解前言系列文章入口符号表和重定位表链接过程分段组装符号决议重定位 编译和链接【四】链接详解 前言 在我大一的时候, 我使用VC6.0对C语言程序进行编译链接和运行 , 然后我接触了VS, Qt creator等众多IDE&…

低空经济:开启未来空中生活的全新蓝海

引言 随着科技的进步,我们不再仅仅依赖地面交通和传统物流。你是否曾幻想过,未来的某一天,快递、外卖可以像魔法一样直接从空中送到你手中?或者,你能乘坐小型飞行器,快速穿梭于城市之间,告别拥堵…

IntegrAO整合不完整数据以实现患者分层

高通量组学分析技术的进步极大地推动了癌症患者的分层研究。然而,多组学整合中的数据不完整问题带来了巨大挑战,因为像样本排除或插补这样的传统方法常常会损害真实生物多样性。此外,将具有部分组学数据的新患者准确分类到现有亚型这一关键任…

[创业之路-299]:图解金融体系结构

一、金融体系结构 1.1 概述 金融体系结构是一个国家以行政的、法律的形式和运用经济规律确定的金融系统结构,以及构成这个系统的各种类型的银行和非银行金融机构的职能作用和相互关系。以下是对金融体系结构的详细分析: 1、金融体系的构成要素 现代金…

#渗透测试#批量漏洞挖掘#致远互联AnalyticsCloud 分析云 任意文件读取

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…

el-table封装一个自定义列配置表格组件(vue3开箱即用)

组件核心功能 拖拽排序(使用 vuedraggable) 显示/隐藏控制 列宽调整 列固定状态记忆 搜索过滤列 本地存储(localStorage)可改成接口保存 默认配置恢复 通过 searchText 动态过滤列。 安装拖拽依赖 npm install vuedragg…

关于qtcreator的安装过程遇到的问题和处理方法

打算开发个对windows兼容性好的软件,最终决定用c语言,后来选择了qt,发现qt有个不错的东西qt quick,界面图形效果表现的不错,还能做动画,甚至可以做成游戏。 于是打算安装这个软件,软件虽然开源…

一文通俗理解为什么需要泛型以及泛型的使用

为什么需要泛型? public static void main(String[] args) {ArrayList list new ArrayList();// 由于集合没有做任何限定,任何类型都可以给其中存放list.add("abc");list.add("def");list.add(5);Iterator it list.iterator();wh…

HtmlRAG:RAG系统中,HTML比纯文本效果更好

HtmlRAG 方法通过使用 HTML 而不是纯文本来增强 RAG 系统中的知识表示能力。通过 HTML 清洗和两步块树修剪方法,在保持关键信息的同时缩短了 HTML 文档的长度。这种方法优于现有基于纯文本的RAG的性能。 方法 其实主要看下围绕html提纯思路,将提纯后的…

KEPServerEX 中信道深入介绍

以下是 KEPServerEX 中信道(Channel) 的详细介绍,涵盖其定义、功能、配置步骤及最佳实践,帮助您快速掌握信道在数据采集中的核心作用: 一、信道(Channel)的定义 信道 是 KEPServerEX 中 连接物…

C#(Winform)通过添加AForge添加并使用系统摄像机

先展示效果 AForge介绍 AForge是一个专门为开发者和研究者基于C#框架设计的, 也是NET平台下的开源计算机视觉和人工智能库 它提供了许多常用的图像处理和视频处理算法、机器学习和神经网络模型,并且具有高效、易用、稳定等特点。 AForge主要包括: 计算机视觉与人…

迅为RK3568开发板篇OpenHarmony实操HDF驱动配置LED-LED测试

将编译好的镜像全部进行烧写,镜像在源码根目录 out/rk3568/packages/phone/images/目录下。 烧写完成之后,在调试串口查看打印日志,如下图所示: 然后打开 hdc 工具,运行测试程序,输入“led_test 1”&…

在VS2022中配置DirectX12环境,并显示显示一个窗口

1.创建空项目并配置项目: 1.打开VS2022,创建C项目中的空项目 2.新建一个Main.cpp文件 3.配置项目 将属性页的C/C项中的语言栏的符合模式设置为否 再将链接器中的系统栏的子系统设置为窗口 设置完成! 2.创建一个Windows窗口: 代码&#…

AI前端开发:蓬勃发展的机遇与挑战

人工智能(AI)领域的飞速发展,正深刻地改变着我们的生活方式,也为技术人才,特别是AI代码生成领域的专业人士,带来了前所未有的机遇。而作为AI应用与用户之间桥梁的前端开发,其重要性更是日益凸显…

DeepSeek+即梦 做AI视频

DeepSeek做AI视频 制作流程第一步:DeepSeek 生成视频脚本和分镜 第二步:生成分镜图片绘画提示词第三步:生成分镜图片第四步:使用可灵 AI 工具,将生成的图片转成视频。第五步:剪映成短视频 DeepSeek 真的强&…

数组练习(深入理解、实践数组)

1.练习1&#xff1a;多个字符从两端移动&#xff0c;向中间汇聚 编写代码&#xff0c;演示多个字符从两端移动&#xff0c;向中间汇聚 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<string.h> int main() {//解题思路&#xff1a;//根据题意再…

学习threejs,使用HemisphereLight半球光

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.HemisphereLight 二、…

vue项目使用vite和vue-router实现history路由模式空白页以及404问题

开发项目的时候&#xff0c;我们一般都会使用路由&#xff0c;但是使用hash路由还是history路由成为了两种选择&#xff0c;因为hash路由在url中带有#号&#xff0c;history没有带#号&#xff0c;看起来更加自然美观。但是hash速度更快而且更通用&#xff0c;history需要配置很…

Fiori APP配置中的Semantic object 小bug

在配置自开发程序的Fiori Tile时&#xff0c;需要填入Semantic Object。正常来说&#xff0c;是需要通过事务代码/N/UI2/SEMOBJ来提前新建的。 但是在S4 2022中&#xff0c;似乎存在一个bug&#xff0c;即无需新建也能输入自定义的Semantic Object。 如下&#xff0c;当我们任…

芯片设计企业的IT支撑点

对于一个芯片设计企业&#xff0c;需要怎么样的IT支撑&#xff0c;这看起来并不是那么重要&#xff0c;并不影响芯片企业是否取得成功&#xff0c;但真正进入这个行业&#xff0c;你会发现&#xff0c;这里还是有一些门道的。 实际上&#xff0c;芯片设计企业对于IT的依赖很重&…