当前位置: 首页 > news >正文

笔记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是用空间来换取时间的一种方法

相关文章:

笔记6——字典dict(dictionary)

文章目录 字典dict(dictionary)定义特点常用操作1.访问值2.添加键值对3.修改值4.删除键值对5.遍历字典6.合并字典 性能应用场景dict和list的区别 字典dict(dictionary) 以 键 - 值对 (key - value pairs)的形式存储数据 定义 字典使用花括号 {} 来定义,键和值之…...

【MySQL】InnoDB单表访问方法

目录 1、背景2、环境3、访问类型【1】const【2】ref【3】ref_or_null【4】range【5】index【6】all 4、总结 1、背景 mysql通过查询条件查询到结果的过程就叫访问方法,一条查询语句的访问方法有很多种,接下来我们就来讲一下各种访问方法。 2、环境 创…...

APP端网络测试与弱网模拟!

当前APP网络环境比较复杂,网络制式有2G、3G、4G网络,还有越来越多的公共Wi-Fi。不同的网络环境和网络制式的差异,都会对用户使用app造成一定影响。另外,当前app使用场景多变,如进地铁、上公交、进电梯等,使…...

【个人开发】deepseed+Llama-factory 本地数据多卡Lora微调

文章目录 1.背景2.微调方式2.1 关键环境版本信息2.2 步骤2.2.1 下载llama-factory2.2.2 准备数据集2.2.3 微调模式2.2.4 微调脚本 2.3 踩坑经验2.3.1 问题一:ValueError: Undefined dataset xxxx in dataset_info.json.2.3.2 问题二: ValueError: Target…...

Redis7.0八种数据结构底层原理

导读 本文介绍redis应用数据结构与物理存储结构,共八种应用数据结构和 一. 内部数据结构 1. sds sds是redis自己设计的字符串结构有以下特点: jemalloc内存管理预分配冗余空间二进制安全(c原生使用\0作为结尾标识,所以无法直接存储\0)动态计数类型(根据字符串长度动态选择…...

Kafka 高吞吐量的底层技术原理

Kafka 之所以能够实现高吞吐量(每秒百万级消息处理),主要依赖于其底层设计和多项优化技术。以下是 Kafka 实现高吞吐量的关键技术原理: 1. 顺序读写磁盘 Kafka 利用磁盘的顺序读写特性,避免了随机读写的性能瓶颈。 顺…...

CCFCSP第34次认证第一题——矩阵重塑(其一)

第34次认证第一题——矩阵重塑(其一) 官网链接 时间限制: 1.0 秒 空间限制: 512 MiB 相关文件: 题目目录(样例文件) 题目背景 矩阵(二维)的重塑(reshap…...

网络工程师 (35)以太网通道

一、概念与原理 以太网通道,也称为以太端口捆绑、端口聚集或以太链路聚集,是一种将多个物理以太网端口组合成一个逻辑通道的技术。这一技术使得多个端口能够并行工作,共同承担数据传输任务,从而提高了网络的传输能力和可靠性。 二…...

O1、R1和V3模型

O1、R1和V3模型分别是不同团队或公司开发的人工智能模型,它们在定位、能力和应用场景上存在显著区别。以下是它们的详细对比: 1. 模型归属 O1模型:由OpenAI开发,属于其高性能推理模型系列。 R1和V3模型:由DeepSeek&a…...

Linux 安装 Ollama

1、下载地址 Download Ollama on Linux 2、有网络直接执行 curl -fsSL https://ollama.com/install.sh | sh 命令 3、下载慢的解决方法 1、curl -fsSL https://ollama.com/install.sh -o ollama_install.sh 2、sed -i s|https://ollama.com/download/ollama-linux|https://…...

docker配置国内源

配置Docker使用国内源(也称为镜像加速器)可以显著提高拉取Docker镜像的速度,特别是在中国地区。以下是如何配置Docker使用国内源的步骤: 1. 修改Docker配置文件 Docker的配置文件通常位于/etc/docker/daemon.json。如果该文件不…...

【leetcode】关于循环数组的深入分析

原题:https://leetcode.cn/problems/rotate-array/description/ 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1…...

DeepSeek 指导手册(入门到精通)

第⼀章:准备篇(三分钟上手)1.1 三分钟创建你的 AI 伙伴1.2 认识你的 AI 控制台 第二章:基础对话篇(像交朋友⼀样学交流)2.1 有效提问的五个黄金法则2.2 新手必学魔法指令 第三章:效率飞跃篇&…...

【力扣题解】【76. 最小覆盖子串】容易理解版

76. 最小覆盖子串 总结和复盘 这是时隔1年4个月之后,再次写的题解,比第一次要清晰很多。 我刚开始,就是用方法一做的,提交之后报超出内存限制; 对方法一进行优化,得到方法二,提交之后就AC了。…...

Android10 音频参数导出合并

A10 设备录音时底噪过大,让音频同事校准了下,然后把校准好的参数需要导出来,集成到项目中,然后出包,导出方式在此记录 设备安装debug系统版本调试好后, adb root adb remount adb shell 进入设备目录 导…...

在 Windows 系统中如何快速进入安全模式的两种方法

在使用电脑的过程中,有时我们可能会遇到一些需要进入“安全模式”来解决的问题。安全模式是一种特殊的启动选项,它以最小化配置启动操作系统,仅加载最基本的驱动程序和服务,从而帮助用户诊断和修复系统问题。本文中简鹿办公将详细…...

计算机网络(1)基础篇

目录 1.TCP/IP 网络模型 2.键入网址--->网页显示 2.1 生成HTTP数据包 2.2 DNS服务器进行域名与IP转换 2.3 建立TCP连接 2.4 生成IP头部和MAC头部 2.5 网卡、交换机、路由器 3 Linux系统收发网络包 1.TCP/IP 网络模型 首先,为什么要有 TCP/IP 网络模型&a…...

自然语言处理NLP入门 -- 第四节文本分类

目标 本章的目标是帮助你理解文本分类的基本概念,并通过具体示例学习如何使用 scikit-learn 训练文本分类模型,以及如何利用 OpenAI API 进行文本分类。 5.1 什么是文本分类? 文本分类(Text Classification)是自然语…...

【redis】数据类型之bitmaps

Redis的Bitmaps是一种基于字符串的数据结构,用于处理位级别的操作。虽然Bitmaps在Redis中并不是一种独立的数据类型,而是基于字符串实现的,但它们提供了高效的位操作功能,适用于需要处理大量布尔值或二进制数据的场景。 基本概念…...

计算机网络-MPLS转发原理

在上一篇关于 MPLS 基础的文章中,我们了解了 MPLS 的基本概念、术语以及它在网络中的重要性。今天,我们将深入探讨 MPLS 转发的原理与流程,帮助大家更好地理解 MPLS 是如何在实际网络中工作的。 一、MPLS 转发概述 MPLS 转发的本质是将数据…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...

Java入门学习详细版(一)

大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

2023赣州旅游投资集团

单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

管理学院权限管理系统开发总结

文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言: 类加载器 1. …...