[Python][字典]详细讲解

目录

  • 0.什么是字典?
  • 1.创建字典
  • 2.查找key
  • 3.新增/修改元素
  • 4.删除元素
  • 5.遍历字典元素
  • 6.取出所有 key 和 value
  • 7.合法的key类型


0.什么是字典?

  • 字典是一种存储键值对(K-V)的结构
    • 但是key不能重复
  • 以C/C++的视角看,就是map
  • 注意
    • 一个字典中的key的类型不一定都一样
      • 但是字典对于key是啥类型,有约束
    • 一个字典中的value的类型不一定都一样
      • 字典对于value是啥类型,没约束

1.创建字典

  • 创建一个空的字典,使用{}表示字典
    a = { }
    b = dict()
    print(type(a))
    print(type(b))
    
  • 可以在创建的同时指定初始值
    • 键值对之间使用,分割,
    • 键和值之间使用:分割
      student = { 'id': 1, 'name': 'SnowK' }
      
  • 为了代码更规范美观,在创建字典的时候往往会把多个键值对,分成多行来书写
    student = {'id': 1,'name': 'SnowK'
    }
    

2.查找key

  • 使用in可以判定key是否在字典中存在,返回布尔值
    student = {'id': 1,'name': 'zhangsan',
    }print('id' in student)
    
  • 使用[]通过类似于取下标的方式,获取到元素的值,只不过此处的"下标"是key
    • 如果key在字典中不存在, 则会抛出异常
      student = {'id': 1,'name': 'zhangsan',
      }print(student['id'])
      print(student['name'])
      
  • 总结
    • 对于字典来说,使用in或者[]来获取value,都是非常高效的操作
      • 哈希表
    • 对于列表来说,使用in比较低小,而是用[]比较高效
      • in:需要把整个列表遍历一遍
      • []:类似于数组/顺序表取下标

3.新增/修改元素

  • 使用[]可以根据key来新增/修改value
    • 如果key不存在,对取下标操作赋值,即:新增键值对
      student = {'id': 1,'name': 'zhangsan',
      }student['score'] = 90
      
    • 如果key已经存在,对取下标操作赋值,即:修改键值对的值
      student = {'id': 1,'name': 'zhangsan','score': 80
      }student['score'] = 90
      

4.删除元素

  • 使用pop()方法根据key删除对应的键值对
    student = {'id': 1,'name': 'zhangsan','score': 80
    }student.pop('score')
    

5.遍历字典元素

  • Python能够保证遍历出来的顺序,就是和插入的顺序是一致的
    • 这一点和C++中的map / unordered_map不同
  • 直接使用for循环,就能够获取到字典中的所有的key,进一步的就可以取出每个值了
    student = {'id': 1,'name': 'zhangsan','score': 80
    }for key in student:print(key, student[key])
    

6.取出所有 key 和 value

  • 使用keys()可以获取到字典中的所有的key
    • 返回类型是dict_keys,可以当作一个列表来使用
      student = {'id': 1,'name': 'zhangsan','score': 80
      }print(student.keys())
      
  • 使用values()可以获取到字典中的所有value
    • 返回类型是dict_values,可以当作一个列表来使用
      student = {'id': 1,'name': 'zhangsan','score': 80
      }print(student.values())
      
  • 使用items()可以获取到字典中所有的键值对
    • 返回类型是dict_items,是一个列表一样的结构,里面每个元素都是一个元组,元组里面包含了键值对
      student = {'id': 1,'name': 'zhangsan','score': 80
      }print(student.items())for key, value in student.items():print(key, value)
      

7.合法的key类型

  • 不是所有的类型都可以作为字典的key
  • 字典本质上是一个哈希表,哈希表的key要求是"可哈希的",也就是可以计算出一个哈希值
    • 可以使用hash()计算某个对象的哈希值
    • 但凡能够计算出哈希值的类型,都可以作为字典的key
      • 不可变对象,一般就是可哈希的
      • 可变的对象,一般就是不可哈希的
  • 列表和字典无法计算哈希值

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

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

相关文章

【STM32本科毕业设计】基于STM32的多功能MP3播放器设计

目录 一. 概述二. 系统硬件设计2.1 整体设计思路2.2 硬件器件的选择2.2.1 MP3解码芯片选择 2.2.2 收音机芯片选择2.2.3 温度传感器选择2.2.4 彩灯驱动芯片选择2.2.5 音效处理芯片选择2.2.6 EEPROM芯片选择2.2.7 功率放大芯片选择2.2.8 电源芯片选择2.2.9 人机交互设备选择 2.3 …

Django学习第一天(如何创建和运行app)

前置知识: URL组成部分详解: 一个url由以下几部分组成: scheme://host:port/path/?query-stringxxx#anchor scheme:代表的是访问的协议,一般为http或者ftp等 host:主机名,域名,…

让数组有序的最少交换次数

Trick : 让数组有序的最少交换次数 Problem One 1224. 交换瓶子 - AcWing题库 有 N 个瓶子,编号 1∼N,放在架子上。 比如有 5 个瓶子: 2 1 3 5 4要求每次拿起 2 个瓶子,交换它们的位置。 经过若干次后,使得瓶子的序号…

Spring Security学习笔记(二)Spring Security认证和鉴权

前言:本系列博客基于Spring Boot 2.6.x依赖的Spring Security5.6.x版本 上一篇博客介绍了Spring Security的整体架构,本篇博客要讲的是Spring Security的认证和鉴权两个重要的机制。 UsernamePasswordAuthenticationFilter和BasicAuthenticationFilter是…

梧桐数据库:数据库技术中表之间的连接算法详解

在数据库技术中,表之间的连接(Join)是一个非常重要的操作,用于从多个表中检索相关数据。不同的连接算法有不同的性能特征,选择合适的连接算法可以显著提升查询效率。下面详细介绍几种常见的连接算法: 1. 嵌…

IPython的主要作用

IPython是一个功能强大的Python交互式shell,相比默认的Python shell,它提供了诸多增强功能和便利性,使得Python编程变得更加高效和愉悦。以下是对IPython的详细解析,包括其功能、组件、安装方法、使用方法以及一些高级功能。 IPy…

如何让LLM准确地输出一个json

这一直是一个难题&#xff0c;因为LLM具有很大的不确定性&#xff0c;而且如果你用过&#xff0c;你一定会看到类似于以下的输出情况: 啰嗦的输出 AI:好的&#xff0c;以下是对问题的json输出: json {"score":"yes" } <eos>形式错误 AI:{score:ye…

【JVM基础05】——组成-能不能解释一下方法区?

目录 1- 引言&#xff1a;方法区概述1-1 方法区是什么&#xff1f;(What)1-2 为什么用方法区&#xff1f;方法区的作用 (Why) 2- ⭐核心&#xff1a;详解方法区(How)2-1 能不能解释一下方法区&#xff1f;2-2 元空间内存溢出问题2-3 什么是常量池&#xff1f;2-4 运行时常量池 …

SAP PP学习笔记31 - 计划运行的步骤2 - Scheduling(日程计算),BOM Explosion(BOM展开)

上一章讲了计划运行的5大步骤中的前两步&#xff0c;计算净需求和计算批量大小。 SAP PP学习笔记30 - 计划运行的步骤1 - Net requirements calculation 计算净需求(主要讲了安全库存要素)&#xff0c;Lot-size calculation 计算批量大小-CSDN博客 本章继续讲计划运行的后面几…

360:从安全卫士到智能生活——一个科技巨头的成长之路

自2005年成立以来&#xff0c;360公司&#xff0c;全称北京奇虎科技有限公司&#xff0c;已经成为中国乃至全球科技领域的一股不可忽视的力量。从最初的互联网安全服务提供商&#xff0c;到如今涉足智能硬件、云计算、大数据、人工智能等领域的多元化科技公司&#xff0c;360的…

**卷积神经网络典型CNN**

LeNet&#xff1a;最早用于数字识别的CNN AlexNet&#xff1a;2012年ILSVRC比赛冠军&#xff0c;远超第二名的CNN&#xff0c;比LeNet更深&#xff0c;用多层小卷积叠加来替换单个的大卷积 ZF Net&#xff1a;2013ILSVRC冠军 GoogleNet&#xff1a;2014ILSVRC冠军 VGGNet&a…

Unity UGUI 之 自动布局组件

本文仅作学习笔记与交流&#xff0c;不作任何商业用途 本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正 本文在发布时间选用unity 2022.3.8稳定版本&#xff0c;请注意分别 1.什么是自动布局组件…

【头歌】Hive表DDL操作(一)答案

本专栏已收集头歌大数据所有答案 以供参考 第1关&#xff1a;Create/Alter/Drop 数据库 答案 复制点击测评 代码块&#xff1a; #********* Begin *********# echo " CREATE DATABASE IF NOT EXISTS test1 LOCATION /hive/test1WITH DBPROPERTIES(creatorJohn,date2019-…

容器化部署革新:Mojo模型的自定义动态配置

容器化部署革新&#xff1a;Mojo模型的自定义动态配置 在当今快速发展的机器学习领域&#xff0c;Mojo模型代表了一种高效、灵活的模型部署方式。容器化部署作为一种流行的技术&#xff0c;能够为模型提供一个轻量级、可移植的运行环境。本文将探讨如何在Mojo模型中实现模型的…

【Node.js入门精要】从零开始的开发之旅

说明文档&#xff1a;Node.js 教程_w3cschool 概念 Node.js 是一个开源、跨平台的 JavaScript 运行时环境&#xff0c;基于 Chrome 的 V8 引擎构建&#xff0c;专为构建高性能和可扩展的网络应用程序而设计的服务端语言。它采用事件驱动、非阻塞 I/O 模型&#xff0c;能够处理大…

GB28181摄像头管理平台WVP视频平台SQL注入漏洞复现 [附POC]

文章目录 GB28181摄像头管理平台WVP视频平台SQL注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 GB28181摄像头管理平台WVP视频平台SQL注入漏洞复现 [附POC] 0x01 前言 免责声明&#xff1a;请勿利用文章内…

Unity UGUI 之 Mask

本文仅作学习笔记与交流&#xff0c;不作任何商业用途 本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正 本文在发布时间选用unity 2022.3.8稳定版本&#xff0c;请注意分别 1.什么是遮罩 遮罩是一…

运算符 、、|、|| 、短路符【|| 、】<< 、>>

》》》&&是逻辑与运算符&#xff0c;|| 是逻辑或运算符 &#xff01;是逻辑非运算符 逻辑与运算符&#xff1a;全为真&#xff08;1&#xff09;即结果为真&#xff08;1&#xff09;&#xff0c;一个为假即全为假&#xff08;0&#xff09; 逻辑或运算符&#xff1a;…

shell循环语句

一&#xff0c; 循环语句 1.for循环语句 读取不同的变量值&#xff0c;用来逐个执行同一组命令 格式 for 变量名 in 取值列表 do 命令序列 done 1.1 列表循环 [rootlocalhost /home]# vim demo32.sh #!/bin/bash for i in {a..c} doecho $i done ~ [rootlocalhost /ho…

数据结构·AVL树

1. AVL树的概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果存数据时接近有序&#xff0c;二叉搜索将退化为单支树&#xff0c;此时查找元素效率相当于在顺序表中查找&#xff0c;效率低下。因此两位俄罗斯数学家 G.M.Adelson-Velskii 和E.M.Landis 在1962年发明了一种解…