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

【python】python中字典的用法记录

文章目录

      • 序言
      • 1. 字典的创建和访问
      • 2. 字典如何添加元素
      • 3. 字典作为函数参数
      • 4. 字典排序

序言

  • 总结字典的一些常见用法

1. 字典的创建和访问

  • 字典是一种可变容器类型,可以存储任意类型对象

  • key : value,其中value可以是任何数据类型,key必须是不可变的如字符串、数字、元组,不可以用列表

  • key是唯一的,如果出现两次,后一个值会被记住

  • 字典的创建

    • 创建空字典

      dictionary = {}
      
    • 直接赋值创建字典

      dictionary = {'name' : 'Nick', 'age' : 20, 'height' : 175}
      
    • 通过关键字dict和关键字参数创建字典

      dictionary = dict(name='Nick', age=20, height=175)
      
      dictionary = dict()
      for i in range(1, 5):dictionary[i] = i * i
      print(dictionary)		# 输出结果:{1: 1, 2: 4, 3: 9, 4: 16}
      
    • 通过关键字dict和二元组列表创建

      my_list = [('name', 'Nick'), ('age', 20), ('height', 175)]
      dictionary = dict(my_list)
      
    • 通过关键字dict和zip创建

      dictionary = dict(zip('abc', [1, 2, 3]))
      print(dictionary)	# 输出{'a': 1, 'b': 2, 'c': 3}
      
    • 通过字典推导式创建

      dictionary = {i: i ** 2 for i in range(1, 5)}
      print(dictionary)	# 输出{1: 1, 2: 4, 3: 9, 4: 16}
      
    • 通过dict.fromkeys()来创建

      dictionary = dict.fromkeys(range(5), 'x')
      print(dictionary)		# 输出{0: 'x', 1: 'x', 2: 'x', 3: 'x'}
      

      这种方法用来初始化字典设置value的默认值

  • 字典的访问

    • 通过键值对访问

      dictionary = {'name' : 'Nick', 'age' : 20, 'height' : 175}
      print(dictionary['age'])
      
    • 通过dict.get(key, default=None)访问:default为可选项,指定key不存在时返回一个默认值,如果不设置默认返回None

      dictionary = {'name' : 'Nick', 'age' : 20, 'height' : 175, 2 : 'test'}
      print(dictionary.get(3, '字典中不存在键为3的元素'))
      
    • 遍历字典的items

      dictionary = {'name' : 'Nick', 'age' : 20, 'height' : 175, 2 : 'test'}
      print('遍历输出item:')
      for item in dictionary.items():print(item)print('\n遍历输出键值对:')
      for key, value in dictionary.items():print(key, ' : ', value)
      
    • 遍历字典的keys或values

      dictionary = {'name' : 'Nick', 'age' : 20, 'height' : 175, 2 : 'test'}print('遍历keys:')
      for key in dictionary.keys():print(key)print('\n通过key来访问:')
      for key in dictionary.keys():print(dictionary[key])print('\n遍历value:')
      for value in dictionary.values():print(value)
      
    • 遍历嵌套字典

      for key, value in dict_2.items():if type(value) is dict:				# 通过if语句判断value是不是字典for sub_key, sub_value in value.items():print(sub_key, "→", sub_value)
      

2. 字典如何添加元素

  • 使用[]

    dictionary = {}
    dictionary['name'] = 'Nick'
    dictionary['age'] = 20
    dictionary['height'] = 175
    print(dictionary)
    
  • 使用update()方法

    dictionary = {'name': 'Nick', 'age': 20, 'height': 175}
    dictionary.update({'age' : 22})         # 已存在,则覆盖key所对应的value
    dictionary.update({'2' : 'tetst'})      # 不存在,则添加新元素
    print(dictionary)
    

3. 字典作为函数参数

  • 字典作为参数传递时:函数内对字典修改,原来的字典也会改变

    dictionary = {'name': 'Nick', 'age': 20, 'height': 175}
    dictionary.update({'age': 22})  # 已存在,则覆盖key所对应的value
    dictionary.update({'2': 'test'})  # 不存在,则添加新元素
    print(dictionary)def dict_fix(arg):arg['age'] = 24dict_fix(dictionary)print(dictionary)	# age : 24
    
  • 字典作为可变参数时:函数内对字典修改,不会影响到原来的字典

    dictionary = {'name': 'Nick', 'age': 20, 'height': 175}
    dictionary.update({'age': 22})  # 已存在,则覆盖key所对应的value
    dictionary.update({'2': 'test'})  # 不存在,则添加新元素
    print(dictionary, '\n')def dict_fix(**arg):for key, value in arg.items():print(key, '->', value)	# age : 22arg['age'] = 24dict_fix(**dictionary)print('\n', dictionary)	# age : 22
    
  • 关于字典作为**可变参数时的key类型说明

    dictionary = {}
    dictionary.update({2: 'test'})
    print(dictionary, '\n')def dict_fix(**arg):for key, value in arg.items():print(key, '->', value)arg['age'] = 24dict_fix(**dictionary)
    
    • 报错:TypeError: keywords must be strings,意思是作为**可变参数时,key必须是string类型
    • 作为普通参数传递则不存在这个问题
    dictionary = {}
    dictionary.update({2: 'test'})
    print(dictionary, '\n')def dict_fix(arg):for key, value in arg.items():print(key, '->', value)arg['2'] = 'new'dict_fix(dictionary)
    
  • 补充一个例子

    def function(*a,**b):print(a)print(b)
    a=3
    b=4
    function(a, b, m=1, n=2)	# (3, 4) {'n': 2, 'm': 1}
    
    • 对于不使用关键字传递的变量,会被作为元组的一部分传递给*a,而使用关键字传递的变量作为字典的一部分传递给了**b

4. 字典排序

  • 使用python内置排序函数

    sorted(iterable, key=None, reverse=False)
    
  • iterable:可迭代对象;key:用来比较的元素,取自迭代对象中;reverse:默认False升序, True降序

    data = sorted(object.items(), key=lambda x: x[0])	# 使用x[0]的数据进行排序
    

【参考文章】
字典的创建方式
字典的访问1
字典的访问2
字典中添加元素
字典作为函数参数1
字典通过关键字参数传参
字典作为可变参数时的key取值问题
*参数和** 形参的区别

created by shuaixio, 2023.10.05

相关文章:

【python】python中字典的用法记录

文章目录 序言1. 字典的创建和访问2. 字典如何添加元素3. 字典作为函数参数4. 字典排序 序言 总结字典的一些常见用法 1. 字典的创建和访问 字典是一种可变容器类型,可以存储任意类型对象 key : value,其中value可以是任何数据类型,key必须…...

基于Java的大学生心理咨询系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…...

Redis-双写一致性

双写一致性 双写一致性解决方案延迟双删(有脏数据的风险)分布式锁(强一致性,性能比较低)异步通知(保证数据的最终一致性,高并发情况下会出现短暂的不一致情况) 双写一致性 当修改了数…...

CustomTkinter:创建现代、可定制的Python UI

文章目录 介绍安装设置外观与主题外观模式主题设置自定义主题颜色窗口缩放CTkFont字体设置CTkImage图片Widgets窗口部件CTk Windows窗口CTk窗口CTkInputDialog对话框CTkToplevel顶级窗口布局pack布局palce布局Grid 网格布局Frames 框架Frames滚动框架...

华为OD机试真题【不含 101 的数】

1、题目描述 【不含 101 的数】 【题目描述】 小明在学习二进制时,发现了一类不含 101的数,也就是: 将数字用二进制表示,不能出现 101 。 现在给定一个整数区间 [l,r] ,请问这个区间包含了多少个不含 101 的数&#…...

Spring IoC和DI详解

IOC思想 IoC( Inversion of Control,控制反转) 不是一门具体技术,而是一种设计思想, 是一种软件设计原则,它将应用程序的控制权(Bean的创建和依赖关系)从应用程序代码中解耦出来&am…...

mysql-binlog

1. 常用的binlog日志操作命令 1. 查看bin-log是否开启 show variables like log_%;2. 查看所有binlog日志列表 show master logs;3.查看master状态 show master status;4. 重置(清空)所有binlog日志 reset master;2. 查看binlog日志内容 1、使用mysqlb…...

通过BeanFactotyPostProcessor动态修改@FeignClient的path

最近项目有个需求,要在启动后,动态修改FeignClient的请求路径,网上找到的基本都是在FeignClient里使用${…},通过配置文件来定义Feign的接口路径,这并不能满足我们的需求 由于某些特殊原因,我们的每个接口…...

数据结构与算法系列-二分查找

二分查找 什么是二分查找&#xff1f; 二分查找是一种针对有序集合&#xff0c;每次将要查找的区间缩小一半&#xff0c;直到找到查找元素&#xff0c;或区间被缩小为0。 如何实现二分查找&#xff1f; 实现有3个注意点&#xff1a; 终止条件是 low < high 2.求中点的算…...

CSS 毛玻璃特效运用目录

主要是记录毛玻璃相关的特效实践案例和实现思路。 章节名称完成度难度文章地址完整代码下载地址Glassmorphism 登录表单完成一般文章链接代码下载Glassmorphism 按钮悬停效果完成一般文章链接代码下载Glassmorphism 计算器完成一般文章链接代码下载Glassmorphism 卡片悬停效果…...

如何在Qt6中引入Network模块

2023年10月1日&#xff0c;周日凌晨 2023年10月2日&#xff0c;周一下午 第一次更新 目录 如果用的是CMakeQt Console ApplicationQt Widgets Application如果用的是qmake 如果用的是CMake find_package(Qt6 COMPONENTS Network REQUIRED) target_link_libraries(mytarget…...

2023/10/4 QT实现TCP服务器客户端搭建

服务器端&#xff1a; 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> #include <QTcpSocket> #include <QList> #include <QMessageBox> #include <QDebug>QT_BEGIN_NAMESPACE namespace Ui { cla…...

云原生边缘计算KubeEdge安装配置

1. K8S集群部署&#xff0c;可以参考如下博客 请安装k8s集群&#xff0c;centos安装k8s集群 请安装k8s集群&#xff0c;ubuntu安装k8s集群 2.安装kubEedge 2.1 编辑kube-proxy使用ipvs代理 kubectl edit configmaps kube-proxy -n kube-system #修改kube-proxy#大约在40多行…...

【LeetCode热题100】--35.搜索插入位置

35.搜索插入位置 使用二分查找&#xff1a; class Solution {public int searchInsert(int[] nums, int target) {int low 0,high nums.length -1;while(low < high){//注意每次循环完都要计算midint mid (low high)/2;if(nums[mid] target){return mid;}if(nums[mid]…...

mysql面试题13:MySQL中什么是异步复制?底层实现?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:讲一讲mysql中什么是异步复制?底层实现? MySQL中的异步复制(Asynchronous Replication)是一种复制模式,主服务器将数据写入二进制日志后,无…...

SpringBoot-Shiro安全权限框架

Apache Shiro是一个强大而灵活的开源安全框架&#xff0c;它干净利落地处理身份认证&#xff0c;授权&#xff0c;企业会话管理和加密。 官网&#xff1a; http://shiro.apache.org/ 源码&#xff1a; https://github.com/apache/shiro Subject&#xff1a;代表当前用户或…...

PostgreSQL基础语法

当谈到关系型数据库管理系统&#xff08;RDBMS&#xff09;时&#xff0c;PostgreSQL是一个备受推崇的选择。它是一个开源的、强大的RDBMS&#xff0c;具有广泛的功能和支持。本文将介绍一些PostgreSQL的基础语法&#xff0c;以帮助您入门。 1. 安装和配置 在开始使用PostgreS…...

编程前置:处理Excel表格,定位单元格位置,输入文字前,让AI机器人知道我说什么

原提问&#xff1a; input输入表头 &#xff08;input内除了/&#xff0c;空格 回车 标点符号等 全部作为单元格分隔符&#xff09; 由我设置input输入的是行or列 给选项 1. 行 2. 列 默认回车或没输入值是列由我设置起始位置行列 例如 3,2 表示3行2列 当我输入3,2 就表示在第…...

Linux基本指令介绍系列第四篇

文章目录 前言一、Linux基本指令介绍1、more指令2、less指令3、head指令4、tail指令5、bc指令6、管道文件介绍7、与时间相关的指令 总结 前言 本文介绍Linux使用时的部分指令&#xff0c;读者如果想了解更多基本指令的使用&#xff0c;可以关注博主的后续的文章。 博主使用的实…...

读取vivo手机截图尺寸移动.jpg等文件

这个代码的设计初衷是为了解决图片处理过程中的一些痛点。想象一下&#xff0c;我们都曾遇到过这样的情况&#xff1a;相机拍摄出来的照片、网络下载的图片&#xff0c;尺寸五花八门&#xff0c;大小不一。而我们又渴望将它们整理成一套拥有统一尺寸的图片&#xff0c;让它们更…...

实战应用:基于快马平台开发具备origin高级分析功能的在线工具

今天想和大家分享一个最近用InsCode(快马)平台做的实战项目——开发一个具备Origin高级分析功能的在线工具。作为一个经常需要处理实验数据的科研狗&#xff0c;Origin这类软件的分析功能确实强大&#xff0c;但每次都要安装本地软件实在麻烦。于是就想试试能不能做个在线版&am…...

MedGemma 1.5新手必看:从安装到问诊,完整使用流程详解

MedGemma 1.5新手必看&#xff1a;从安装到问诊&#xff0c;完整使用流程详解 你是否曾面对一份复杂的化验单&#xff0c;需要快速理解其临床意义&#xff1f;是否在深夜值班时&#xff0c;想快速确认某个药物的相互作用&#xff1f;或者&#xff0c;作为一名医学生&#xff0…...

实战指南:基于快马平台,快速构建可部署的unet卫星图像分割系统

今天想和大家分享一个实战项目&#xff1a;基于UNet的卫星图像建筑物分割系统。这个项目特别适合在InsCode(快马)平台上快速搭建&#xff0c;因为它涉及从数据处理到模型部署的完整流程&#xff0c;而平台的一键部署功能正好能省去繁琐的环境配置工作。 项目背景与需求分析 卫星…...

别再傻等DockerHub了!手把手教你配置阿里云镜像加速,5分钟搞定MySQL 8.0拉取

国内开发者必备&#xff1a;5分钟配置Docker镜像加速全攻略 每次在终端输入docker pull后&#xff0c;看着进度条像蜗牛一样缓慢移动&#xff0c;或者干脆直接报错Error response from daemon&#xff0c;这种体验对国内开发者来说再熟悉不过了。DockerHub的服务器远在海外&am…...

基于SpringBoot+Vue的月度员工绩效考核管理系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】

摘要 现代企业管理中&#xff0c;绩效考核是提升员工工作效率、优化人力资源配置的重要手段。传统的绩效考核多依赖纸质记录或简单的电子表格&#xff0c;存在数据易丢失、统计效率低、反馈周期长等问题。随着信息化技术的发展&#xff0c;企业亟需一套高效、精准的绩效考核管理…...

在QCS6490开发板上跑通Yolov8n目标检测:从ONNX模型到高通QNN格式的完整转换指南

在QCS6490开发板上部署Yolov8n目标检测&#xff1a;ONNX到QNN格式的终极转换手册 当嵌入式AI遇上高性能目标检测&#xff0c;QCS6490开发板与Yolov8n的组合正在工业质检、智能安防等领域掀起效率革命。本文将手把手带你突破模型转换的关键瓶颈——从标准ONNX格式到高通专属QNN格…...

逆向工程实战:如何用dbcc解析第三方CAN协议(含自定义结构体改造技巧)

逆向工程实战&#xff1a;用dbcc深度解析非标CAN协议与结构体改造技巧 在汽车电子和工业控制领域&#xff0c;CAN总线协议逆向分析是一项极具挑战性的工作。面对没有文档说明的第三方设备或商用车辆黑盒协议&#xff0c;工程师常常需要从原始数据流中重建通信逻辑。本文将深入探…...

基于Xinference-v1.17.1的嵌入式Linux开发指南

基于Xinference-v1.17.1的嵌入式Linux开发指南 1. 引言 嵌入式设备上的AI推理一直是个技术挑战&#xff0c;特别是在资源受限的环境中部署大模型。Xinference-v1.17.1作为一个开源推理框架&#xff0c;为嵌入式Linux系统提供了轻量级的AI模型部署方案。无论你是想在树莓派上运…...

AW88195音频编解码器驱动从MTK到RK平台的移植实践

1. 认识AW88195音频编解码器驱动移植 第一次接触AW88195音频编解码器驱动移植时&#xff0c;我也是一头雾水。这个来自艾为的音频芯片主要用于提升扬声器音质&#xff0c;但厂商提供的驱动包往往只适配特定平台。比如这次遇到的AW88195_Driver_MTK_V0.1.6.zip就是专门为MTK平台…...

实测分享:圣女司幼幽-造相Z-Turbo生成高质量角色图片案例

实测分享&#xff1a;圣女司幼幽-造相Z-Turbo生成高质量角色图片案例 1. 引言&#xff1a;当AI画笔遇上经典角色 如果你是《牧神记》的读者&#xff0c;或者对国风仙侠角色情有独钟&#xff0c;那么“圣女司幼幽”这个名字一定不会陌生。她清冷孤傲、手持长剑的形象早已深入人…...