数据容器入门(dict 字典)

news2024/12/24 2:34:20

字典的定义:

        字典的定义,同样使用{},不过存储的元素是一个个的:键值对,如下语法:

        

# 定义字典字面量
{key:value, key:value, ........., key:value}

# 定义字典变量
my_dict = {key:value, key:value, ........., key:value}

# 定义空字典
my_dict = {}                # 空字典定义方式1
my_dict = dict()          # 空字典定义方式2

字典的特点:

  • 可以容纳多个数据
  • 可以容纳不同类型的数据
  • 每一份数据是Key Value键值对
  • 可以通过Key获取带Value,Key不可重复(重复会覆盖)
  • 不支持下标索引
  • 可以修改(增加或删除更新元素等)
  • 支持for循环,不支持while循环

字典的注意事项:

  • 键值对的key和value可以是任意类型(key不可为字典)
  • 字典内的key不允许重复,重复添加等同于覆盖原有数据
  • 字典不可用下标索引,而是通过key检索value

字典的常用操作

 

新增元素

        语法:字典[key = value],结果字典被修改,新增了元素

my_dict = {"张三": 99, "李四": 66, "王五": 75, "赵六": 82}
print(my_dict)
my_dict["app"] = 50
print(f"字典新增了元素为{my_dict}")    


结果:
{'张三': 99, '李四': 66, '王五': 75, '赵六': 82}
字典新增了元素为{'张三': 99, '李四': 66, '王五': 75, '赵六': 82, 'app': 50}

更新元素:

      语法:字典[key = value],结果字典被修改,元素被更新

      注意:字典内的key不允许重复,所以对已存在的key执行上述操作,就是更新value值

my_dict = {"张三": 99, "李四": 66, "王五": 75, "赵六": 82}
print(my_dict)
my_dict["张三"] = 50
print(f"字典更新了元素为{my_dict}")



结果:
{'张三': 99, '李四': 66, '王五': 75, '赵六': 82}
字典更新了元素为{'张三': 50, '李四': 66, '王五': 75, '赵六': 82}

定义嵌套字典

student_score_dict = {
    "张三": {
        "语文": 100,
        "数学": 110,
        "英语": 115,
    }, "李四": {
        "语文": 111,
        "数学": 105,
        "英语": 100,
    }, "王五": {
        "语文": 95,
        "数学": 120,
        "英语": 117,
    }, "赵六": {
        "语文": 89,
        "数学": 98,
        "英语": 118,
    }
}
print(f"学生的考试成绩是:{student_score_dict}")


结果:
学生的考试成绩是:{'张三': {'语文': 100, '数学': 110, '英语': 115}, '李四': {'语文': 111, '数学': 105, '英语': 100}, '王五': {'语文': 95, '数学': 120, '英语': 117}, '赵六': {'语文': 89, '数学': 98, '英语': 118}}

从嵌套字典获取数据        value = 字典[key][key]

student_score_dict = {
    "张三": {
        "语文": 100,
        "数学": 110,
        "英语": 115,
    }, "李四": {
        "语文": 111,
        "数学": 105,
        "英语": 100,
    }, "王五": {
        "语文": 95,
        "数学": 120,
        "英语": 117,
    }, "赵六": {
        "语文": 89,
        "数学": 98,
        "英语": 118,
    }
}
score = student_score_dict["王五"]["英语"]
print(f"获取王五的英语成绩:{score}")


结果:
获取王五的英语成绩:117

删除元素        字典.pop(key)

        语法:字典.pop(key),结果:获取指定可以的value,通杀字典被修改,指定key的数据被删除

my_dict = {
    "张三": 99,
    "李四": 66,
    "王五": 75,
    "赵六": 82
}
value = my_dict.pop("张三")
print(f"字典中移除了一个元素,结果是:{my_dict}")


结果:
字典中移除了一个元素,结果是:{'李四': 66, '王五': 75, '赵六': 82}

清空元素  字典.clear()

        语法:字典.clear(),结果:字典被修改,元素被清空

my_dict = {
    "张三": 99,
    "李四": 66,
    "王五": 75,
    "赵六": 82
}
my_dict.clear()
print(f"字典被清空了,内容是:{my_dict}")


结果:
字典被清空了,内容是:{}

获取全部的key值   字典.keys() 

my_dict = {
    "张三": 99,
    "李四": 66,
    "王五": 75,
    "赵六": 82
}
my_key = my_dict.keys()
print(f"字典:{my_dict}\n里边全部的key值为{my_key}")


结果:
里边全部的key值为dict_keys(['张三', '李四', '王五', '赵六'])


遍历字典  for循环

        字典没下标所以不能使用while循环

my_dict = {
    "张三": 99,
    "李四": 66,
    "王五": 75,
    "赵六": 82
}


# 方式1:通过获取到全部的key来完成遍历
my_key = my_dict.keys()
for key in my_key:
    print(f"字典key的可以是:{key}")
    print(f"字典value的可以是:{my_dict[key]}")


# 方式2:直接对字典进行for循环,每一次循环都是直接得到key
for key in my_dict:
    print(f"2字典key的可以是:{key}")
    print(f"2字典value的可以是:{my_dict[key]}")


结果:
字典key的可以是:张三
字典value的可以是:99
字典key的可以是:李四
字典value的可以是:66
字典key的可以是:王五
字典value的可以是:75
字典key的可以是:赵六
字典value的可以是:82


2字典key的可以是:张三
2字典value的可以是:99
2字典key的可以是:李四
2字典value的可以是:66
2字典key的可以是:王五
2字典value的可以是:75
2字典key的可以是:赵六
2字典value的可以是:82

统计字典内的元素数量  len(字典)

my_dict = {
    "张三": 99,
    "李四": 66,
    "王五": 75,
    "赵六": 82
}
print(f"字典:{my_dict}的长度为:{len(my_dict)}")


结果:
字典:{'张三': 99, '李四': 66, '王五': 75, '赵六': 82}的长度为:4

练习:

 

# 定义字典
my_dict = {
    "王力宏": {
        "部门": "科技部",
        "工资": 3000,
        "级别": 1

    },
    "周杰伦": {
        "部门": "市场部",
        "工资": 5000,
        "级别": 2
    },
    "林俊杰": {
        "部门": "市场部",
        "工资": 7000,
        "级别": 3
    },
    "张学友": {
        "部门": "科技部",
        "工资": 4000,
        "级别": 1
    },
    "刘德华": {
        "部门": "市场部",
        "工资": 6000,
        "级别": 2
    }
}
print(f"全体员工当前信息如下:\n {my_dict}")

for a in my_dict:
    if my_dict[a]["级别"] == 1:
        my_dict[a]["级别"] = 2        # 将级别重新赋值为2
        my_dict[a]["工资"] = my_dict[a]["工资"] + 1000      # 将工资加1000后重新存入字典
print(f"全体级别为1的员工完成升职加薪操作,操作后:\n {my_dict}")



结果:
全体员工当前信息如下:
 {'王力宏': {'部门': '科技部', '工资': 3000, '级别': 1}, '周杰伦': {'部门': '市场部', '工资': 5000, '级别': 2}, '林俊杰': {'部门': '市场部', '工资': 7000, '级别': 3}, '张学友': {'部门': '科技部', '工资': 4000, '级别': 1}, '刘德华': {'部门': '市场部', '工资': 6000, '级别': 2}}
全体级别为1的员工完成升职加薪操作,操作后:
 {'王力宏': {'部门': '科技部', '工资': 4000, '级别': 2}, '周杰伦': {'部门': '市场部', '工资': 5000, '级别': 2}, '林俊杰': {'部门': '市场部', '工资': 7000, '级别': 3}, '张学友': {'部门': '科技部', '工资': 5000, '级别': 2}, '刘德华': {'部门': '市场部', '工资': 6000, '级别': 2}}

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

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

相关文章

JVM面试题总结

一.请简述对象的创建过程 对象的new字节码执行指令如下图 首先0指令new出一片内存空间,然后进行对象的初始化,初始化完成前变量都是初始值如m0 然后创建连接,t指向对象。 二.DCL单例要不要加volatile? DCL单例就是要懒汉式从创建…

广州市番禺区委领导一行莅临和鲸科技考察交流

7月18日下午,广州市番禺区区委常委、组织部部长、人才工作局局长唐力明,组织部副部长、两新工委书记罗翌洁及组织部其他相关领导一行莅临和鲸科技开展实地考察与调研,国投科创广州基地负责人、海创人才南方创业服务中心常务副秘书长徐斌&…

中小企业部署MES管理系统需要考虑哪些问题

随着制造业的快速发展,越来越多的中小企业开始意识到数字化管理的重要性。为了提高生产效率、降低成本、提升品质及满足客户需求,部署MES生产管理系统成为了中小企业实现数字化转型的关键一步。然而,在部署MES管理系统时,中小企业…

公开讲座笔记 | 雷达学报 雷达系统微课 - 第三讲 相控阵雷达 与 “1+1=2“

原文链接:https://mp.weixin.qq.com/s?__bizMzg4MjgxMjgyMg&mid2247486366&idx2&sn242bd062b6bcd1d32acba16a148f58c9&chksmcf51b967f8263071d912a178881c7ff3c4143b78201c30723a8c121cc53f47ade584a918648c#rd 第三讲 相控阵雷达 与 “112” 主讲…

JavaScript数组所有方法集合

##方法 1、concat 用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组 2、copyWithin 浅复制数组的一部分到同一数组中的另一个位置,并返回它,不会改变原数组的长度 3、entries 返回一个新的 Array Iterator 对象&#xf…

最新版本的OpenLens,有两个隐藏技能

最新版本的OpenLens v6.4.15,有两个隐藏技能 1、需要添加扩展插件alebcay/openlens-node-pod-menu,查看pod时才会出现进入命令行的按钮 2、测试环境查看pod、node时可能会出现监控数据未显示,点击集群的Setting,在Metrics里选…

网页性能优化,各种指标检测,谷歌统计使用,pagespeed

每日鸡汤:每个你想要学习的瞬间都是未来的你像自己求救 前端性能优化是个很重要的模块,但是如何查看性能优化后的网页的效果也是很重要的,要从技术的层面总结,不能只靠用户的感受。 常用的评估网页应用性能的指标有 LCP, FID, CL…

TortoiseGit 入门指南13:拣选

对于多分支的代码库,将代码从一个分支转移到另一个分支是常见需求。 这时分两种情况。一种情况是,你需要另一个分支的所有代码变动,那么就采用 合并(merge)。另一种情况是,你只需要部分代码变动&#xff0…

目标检测算法:FPN思想解读

目标检测算法:FPN思想解读 说明 ​ FPN算法一种方法/思想,在许多的模型架构中都经常采用,也是提高模型精度的重要方法。 免责申明 ​ 有误写/错写/错误观点/错误解读,或者大家有其它见解,都可以在评论区指出&#xff0…

Linux中常用的指令

ls ls [选项] [目录或文件] 功能:对于目录,列出该目录下所有的子目录和文件;对于文件,列出该文件的文件名和其他属性 常用选项: -a:列出目录下的所有文件,包括以.开头的隐藏文件 -l:列出文件的详细信息。…

想要在独立站上赚钱,需要考虑哪些关键点?

我们都知道,没有什么工作是简单的,但是做得好的话,独立站确实是非常赚钱的。现在建立一个网站非常容易,你需要的花费也不高。 刚好后台也收到很多小伙伴问我独立站的盈利模式?怎么做才能赚钱?要在独立站上…

Django中使用反向关系名称(related_name)解决由“多对多”关系引起的字段名字冲突问题引起的迁移命令报错。

当在模型中为关系字段添加了related_name参数后,您可以使用该参数指定的名称来引用反向关系。下面是一个简单的例子来说明如何引用反向关系。 假设您有以下两个模型: from django.db import modelsclass Author(models.Model):name models.CharField(…

Ceph 服务的运用

目录 一、资源池 pool 管理 1.创建一个 Pool 资源池 2.查看集群 Pool 信息 3.查看资源池副本的数量 4.查看 PG 和 PGP 数量 5.修改 pg_num 和 pgp_num 的数量为 128 6.修改 Pool 副本数量为 2 7.修改默认副本数为 2 8.删除 Pool 资源池 8.1修改配置文件 8.2推送 ceph…

10.1寸三防加固平板电脑Windows工业平板

当前,移动计算设备的需求日益增长,特别是在现场工作和移动任务中的应用。为了满足这一需求,三防加固平板电脑SP-Q19采用了整机一体成型的设计,无合成拼接,使得长侧边的直线条与短侧边的圆弧形巧妙融合。同时&#xff0…

【wxWidgets】使用布局控件进行窗口布局

使用布局控件进行窗口布局 窗口布局基础 为了在各种环境中都能使窗口拥有合适的位置和大小,可能需要在OnSize事件中计算每一个窗口的大小并设置新位置,当然使用窗口布局控件可以更方便地实现 如果选择使用布局控件,可以通过自己编写或者使用…

创新创业项目申报管理系统vue+nodejs+mysql

开发语言 node.js 框架:Express 前端:Vue.js 数据库:mysql 数据库工具:Navicat 开发软件:VScode 本站是一个B/S模式系统,采用nodejs框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界…

详解UDP协议

在讲本篇文章之前,给读者介绍两个指令 1.netstat:用来查看网络状态的重要工具 语法:netstat [选项] n 拒绝显示别名,能显示数字的全部转化成数字l 仅列出有在 Listen (监听) 的服務状态p 显示建立相关链接的程序名t (tcp)仅显示tcp相关选项…

JDK、JRE、JVM之间的关系是什么?

目录 JVM、JRE、JDK的关系? JDK、JRE、JVM都是什么? JVM JRE JDK JVM、JRE、JDK的关系? 三者包含关系: JDK>JRE>JVM JDK、JRE、JVM都是什么? jdk:是用于java开发的最小环境 包括:ja…

C++牛客WebServer项目学习笔记一

1.Linux系统命令: sudo apt install softname # sudo 管理员权限;apt 安装软件命令;ps -ef | grep ssh # ps 查看进程命令;| 管道符;grep 过滤出(过滤出ssh关键词); 3.Ctrl滚动鼠标…

抓 https 报文新方案 -Magisk+LSPosed,来试试吧

关于如何抓取Android端https报文,在之前一篇文章中有介绍可以通过VitualXposedJustTrustMe模块禁用SSL验证,这样可以抓取到https,还是有一些同学反馈以下的一些问题: App在低版本的Android上不兼容,需要用高版本的And…