Python小白学习:超级详细的字典介绍(字典的定义、存储、修改、遍历元素和嵌套)

目录

  • 一、字典简介
    • 1.1 创建字典
    • 1.2 访问字典中的值
    • 1.3 添加键值对
    • 1.4 修改字典中的值
      • 实例
    • 1.5 删除键值对
    • 1.6 由多个类似对象组成的字典
    • 1.7 使用get()访问值
    • 1.8 练习题
  • 二、遍历字典
    • 2.1 遍历所有键值对
      • 实例
    • 2.2 遍历字典中的所有键
    • 2.3 按照特定顺序遍历字典中的所有键
    • 2.4 遍历字典中的所有值
      • 如何对输出值进行去重
      • 集合
    • 2.5 练习题
      • 代码
      • 输出
  • 三、字典和列表的嵌套使用
    • 3.1 在列表中存储字典
      • 将字典手动输入列表
      • 自动生成多人的字典并添加进列表
    • 3.2 在字典中存储列表
      • 输出字典中各个列表的长度
      • 练习
    • 3.3 在字典中存储字典
  • 四、练习题

一、字典简介

字典由花括号{ }中的一系列键值对表示

1.1 创建字典

使用一对空花括号来定义一个字典,再分别添加各个键值对。

alien = {}
alien['color'] = 'green'
alien['points'] = 5
print(alien)

在这里插入图片描述

1.2 访问字典中的值

字典中的元素由键值对组成,要获取与键相关联的值,可依次指定字典名和放在方括号内的键。

alien_0 = {'color':'green','points':5}
print(alien_0['color'])
print(alien_0['points'])

在这里插入图片描述
字典中可包含任意数量的键值对。

1.3 添加键值对

字典是一种动态结构,可以随时在其中添加键值对。如要添加键值对,可依次指定字典名、用方括号括起的键和相关联的值。

alien_0 = {'color':'green','points':5}
print(alien_0)
alien_0['x_position'] = 0
alien_0['y_position'] = 25
print(alien_0)

在这里插入图片描述

1.4 修改字典中的值

想要修改字典中的值,可以依次指定字典名,用方括号括起来的键,以及与该键相关联的新值。

alien_0 = {'color':'green','points':5}
print(alien_0['color'])
alien_0['color'] = 'yellow'
print(alien_0['color'])

在这里插入图片描述

实例

对一个能够以不同速度移动的外星人进行位置跟踪,设置外星人的移动速度有‘快、慢、中等’3个速度,快速一次向右移动3m,慢速一次向右移动1m,中等速度一次向右移动2m,现在外星人的位置为(0,25),机器人以不同的速度移动后的位置分别为多少?

alien = {'name':'alen','color':'red','x_position':0,'y_position':25,'speed':'medium'}
position = (alien['x_position'],alien['y_position'])
print(f"The position is {position}")
if alien['speed'] == 'fast':x = 3
elif alien['speed'] == 'medium':x = 2
elif alien['speed'] == 'slow':x = 1
alien['x_position'] += x
new_position = (alien['x_position'],alien['y_position'])
print(f"The new position with the speed of {alien['speed']} is {new_position}")

代码中设置的是速度为medium时的位置坐标。
在这里插入图片描述
修改字典中speed键对应的值,可以得到不同速度的位置。
在这里插入图片描述

1.5 删除键值对

使用del语句删除不需要的键值对

alien = {'name':'alen','color':'red','x_position':0,'y_position':25,'speed':'fast'}
print(alien)
del alien['name']
print(alien)

在这里插入图片描述

1.6 由多个类似对象组成的字典

在前面的例子中,字典存储的是一个对象(alien)的多个属性,也可以用字典存储诸多对象的同种信息,如使用一个字典存储每个人最喜欢的编程语言。

favorite_lauguague = {'ken':'python','jack':'c++','will':'java','mary':'ruby'
}
print(f"Will's favorite lauguague is {favorite_lauguague['will'].title()}")

在定义长字典时可以使用上面所示的多行定义。

1.7 使用get()访问值

  • get(键,指定键不存在时返回的值)

该函数可以处理当想要查询的键不存在时的异常情况。

favorite_languague = {'ken':'python','jack':'c++','will':'java','mary':'ruby'
}
print(favorite_languague)
languague = favorite_languague.get('diane','ERROR!No Such People Named Diane!')
print(languague)
favorite_languague['diane'] = 'c'
languague = favorite_languague.get('diane','ERROR!No Such People Named Diane!')
print(favorite_languague)
print(languague)

上述代码中:

  • 使用get查询不存在的键时(diane不存在),会返回get方法中定义的发生异常时的字符串;
  • 使用get查询存在的键时(为diane键赋对应的值为c),会返回该键对应的值。

1.8 练习题

在这里插入图片描述

print('6-1')
people = {'first_name':'winnie','last_name':'ma','age':22,'city':'zibo'
}
print(people)print('6-2')
favorate_numbers={'will':5,'jack':10,'diane':6,'peter':51,'mary':8
}

二、遍历字典

2.1 遍历所有键值对

使用for循环items方法遍历所有键值对。

for key, value in dictionary.items( )

  • 在for循环中声明两个变量key、value来代表键和值,可以使用任意变量名(如k、v等)。
  • items方法返回一个键值对列表,返回的值赋给两个变量。
user_0 = {'username' : 'jack','age' : 20,'city' : 'los angeles'
}
for key,value in user_0.items():print(key,value)

在这里插入图片描述

实例

打印每个人最喜欢的语言是什么,此处使用的2个变量名即与变量对应,分别为name和language.

favorite_languages = {'jen': 'python','sarah': 'c','edward': 'ruby','phil': 'python',}
for name,lauguage in favorite_languages.items():print(f"{name.title()}'s favorate language is {lauguage.title()}.")

2.2 遍历字典中的所有键

keys( ) : 返回一个列表,该列表包含该字典中所有的键。

favorite_languages = {'jen': 'python','sarah': 'c','edward': 'ruby','phil': 'python',}
for name in favorite_languages.keys():print(name.title())

在这里插入图片描述
keys()方法不仅可用来遍历,还可以用来判断键是否包含在字典中。

favorite_languages = {'jen': 'python','sarah': 'c','edward': 'ruby','phil': 'python',}if 'will' not in favorite_languages.keys():print('Will, please enter your name!')

2.3 按照特定顺序遍历字典中的所有键

使用sorted方法对键进行排序:sorted ( dictionary.keys( ) )

favorite_languages = {'jen': 'python','sarah': 'c','edward': 'ruby','phil': 'python',}
for name in sorted(favorite_languages.keys()):print(f"{name.title()}, thank you!")

可以看到输出的名字都根据字母进行了排序。

在这里插入图片描述

2.4 遍历字典中的所有值

values( )方法返回一个值列表。

favorite_languages = {'jen': 'python','sarah': 'c','edward': 'ruby','phil': 'python','will' : 'python'}
for lauguage in sorted(favorite_languages.values()):print(lauguage)

在这里插入图片描述
可以看到该方法输出的值中有重复项Python,想要去掉重复项则可使用set方法去重。

如何对输出值进行去重

set( ):集合,集合中的每个元素都是唯一的。

favorite_languages = {'jen': 'python','sarah': 'c','edward': 'ruby','phil': 'python','will' : 'python'}
for lauguage in set(favorite_languages.values()):print(lauguage)

在这里插入图片描述
可以看到去掉了Python重复项。

集合

集合和字典一样都使用花括号进行定义。当花括号内没有键值对时,定义的很可能就是集合。

lauguages = {'python','python','c'}
print(lauguages)

可以看到定义的集合中有重复元素,而集合输出会自动去重。

在这里插入图片描述

2.5 练习题

在这里插入图片描述

代码

print('6-5')
rivers_countrys = {'nile':'egypt','changjiang':'china','amazon':'brazil'
}
for river,country in rivers_countrys.items():print(f"The {river.title()} runs through {country.title()}.")print('6-6')
favorite_languages = {'jen': 'python','sarah': 'c','edward': 'ruby','phil': 'java','will' : 'python'}
names = ['will','jen','peter','ken']
for name in names:if name in favorite_languages.keys():print(f"Dear {name.title()}, thank you!")else:print(f'Dear {name.title()}, please joy our party.')

输出

在这里插入图片描述

三、字典和列表的嵌套使用

3.1 在列表中存储字典

加入我们需要一个多人名单,每个人都需要包含其姓名、年龄、性别的信息,那么如何统筹管理这些多人信息呢?

答案是创建一个users列表,其中每个user都是一个字典,包含该user的各种信息。

将字典手动输入列表

user_1 = {'name':'will','age':40,'gender':'male'}
user_2 = {'name':'diane','age':37,'gender':'female'}
user_3 = {'name':'cary','age':25,'gender':'male'}users = [user_1,user_2,user_3]for user in users:print(user)

在这里插入图片描述

自动生成多人的字典并添加进列表

若需要生成更多人的信息,则可以先创建一个users空列表,然后使用range方法生成需要的user数目。

users = []
for number in range(30):new_user = {'name':'will','age':40,'gender':'male'}users.append(new_user)#显示前5个
for user in users[:5]:print(user)

使用range(30)自动生成30个user字典,然后依次使用append方法添加进users列表中。

下图显示输出前users列表中的前五个user字典。

在这里插入图片描述

3.2 在字典中存储列表

假如想要建立人们所掌握的编程语言的字典,每个人可能掌握多种编程语言,所以就需要一个键对应多个值,此时可以在字典中嵌套列表。

people_lauguages = {'will' : ['python','c'],'peter' : ['c++','java'],'ken' : ['ruby','c++','go']
}
for people,lauguages in people_lauguages.items():print(f"{people.title()} can master:",end=" ")for lauguage in lauguages:print(lauguage.title(),end=" ")else:print("\n")

在这里插入图片描述

输出字典中各个列表的长度

使用values方法来获取字典中的列表,然后使用len方法统计列表长度。

people_lauguages = {'will' : ['python','c'],'peter' : ['c++','java'],'diane' : ['python'],'ken' : ['ruby','c++','go'],'cary' : ['c']
}for lauguages in people_lauguages.values():print(len(lauguages))

在这里插入图片描述

练习

假如需要进一步对人们掌握的语言个数进行判断,若只能掌握一种语言,则输出“你需要继续加油学习”语句。

people_lauguages = {'will' : ['python','c'],'peter' : ['c++','java'],'diane' : ['python'],'ken' : ['ruby','c++','go'],'cary' : ['c']
}
for people,lauguages in people_lauguages.items():if len(lauguages) == 1:print(f"{people.title()}, you need to learn more lauguages!",end=" ")elif len(lauguages) >=2:print(f"{people.title()}, you already master",end=" ")for lauguage in lauguages:print(lauguage,end=" ")else:print("error!")print("\n")

在这里插入图片描述

3.3 在字典中存储字典

字典中嵌套了相同结构的字典。

users = {'mary' : {'age':21,'gender':'female'},'will' : {'age':40,'gender':'male'}
}for name, name_info in users.items():print(f"{name}")for age,gender in name_info.items():print(age,gender)

在这里插入图片描述

四、练习题

在这里插入图片描述
在这里插入图片描述

#6-7
people_1 = {'first_name':'winnie','last_name':'ma','age':22,'city':'zibo'
}
people_2 = {'first_name':'will','last_name':'zhao','age':40,'city':'qingdao'
}
people_3 = {'first_name':'mary','last_name':'wang','age':20,'city':'jinan'
}
people = [people_3,people_2,people_1]for p in people:for k,v in p.items():print(k,v)

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

04 Ubuntu中的中文输入法的安装

在Ubuntu22.04这种版本相对较高的系统中安装中文输入法,一般推荐使用fctix5,相比于其他的输入法,这款输入法的推荐词要好得多,而且不会像ibus一样莫名其妙地失灵。 首先感谢文章《滑动验证页面》,我是根据这篇文章的教…

通用指令(汇编)

一、数据处理指令1)数学运算数据运算指令的格式数据搬移指令立即数伪指令加法指令带进位的加法指令减法指令带借位的减法指令逆向减法指令乘法指令数据运算指令的扩展 2)逻辑运算按位与指令按位或指令按位异或指令左移指令右移指令位清零指令 3&#xff…

前端实现打印1 - 使用 iframe 实现 并 分页打印

目录 打印代码对话框预览打印预览 打印代码 <!-- 打印 --> <template><el-dialogtitle"打印":visible.sync"dialogVisible"width"50%"top"7vh"append-to-bodyclose"handleClose"><div ref"print…

STM32 DHT11

DHT11 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。 使用单总线通信 该传感器包括一个电容式感湿元件和一个NTC测温元件&#xff0c;并于一个高性能8位单片机相连&#xff08;模数转换&#xff09;。 DHT11引脚说明 开漏模式下没有输出高电平的能…

Embedding入门介绍以及为什么Embedding在大语言模型中很重要

Embeddings技术简介及其历史概要 在机器学习和自然语言处理中&#xff0c;embedding是指将高维度的数据&#xff08;例如文字、图片、音频&#xff09;映射到低维度空间的过程。embedding向量通常是一个由实数构成的向量&#xff0c;它将输入的数据表示成一个连续的数值空间中…

Java版本spring cloud + spring boot企业电子招投标系统源代码 tbms

​ 功能模块&#xff1a; 待办消息&#xff0c;招标公告&#xff0c;中标公告&#xff0c;信息发布 描述&#xff1a; 全过程数字化采购管理&#xff0c;打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力&#xff0c;为…

Kubernetes概述

Kubernetes概述 使用kubeadm快速部署一个k8s集群 Kubernetes高可用集群二进制部署&#xff08;一&#xff09;主机准备和负载均衡器安装 Kubernetes高可用集群二进制部署&#xff08;二&#xff09;ETCD集群部署 Kubernetes高可用集群二进制部署&#xff08;三&#xff09;部署…

企业新片场排名如何优化

企业新片场排名如何优化 要如何去做关键SEO&#xff1f;第一个我们要做的就是做好 SEO 关键词的选词&#xff0c;一般就是会有第一个常用的选词方法&#xff0c;第一是以常用的提问词去做&#xff0c;不实像是情人节买什么礼物&#xff0c;母亲节买什么礼物&#xff0c; 618 有…

推荐前端开发者提升效率的工具

是否掌握新的技术很大程度决定着你是否被淘汰。 虽然应用程序试图将网站替代&#xff0c;但前端 Web 开发业务仍在快速变化和增长&#xff0c;前端开发人员的功能并没有消失。以下介绍一款前端开发者提升效率的工具。 目录 一、低代码工具前景 二、如何理解低代码工具 三、前端…

【怎么提高性能和解决高并发】

怎么解决高并发 解决高并发的整体流程大概是&#xff1a; 先进行性能评估、再进行性能测试、然后找到程序可以承受的临界点、最后针对出问题的地方&#xff0c;进行优化。当然硬件设置对高并发的影响也很重要&#xff0c;如果达到硬件天花板&#xff0c;那么再怎么优化程序都…

java gc分析

使用工具转换&#xff1a;https://ctbots.com/#/ 通用GC分析 jstat -gc -t pid堆内存分析 jstat -gccapacity -t pid年轻代GC分析 jstat -gcnew -t pid年轻代内存分析 jstat -gcnewcapacity -t pid老年代GC分析 jstat -gcold -t pid老年代内存分析 jstat -gcoldcapacity…

Ubuntu18.04 安装opencv 4.8.0教程(亲测可用)

1. 安装准备 安装前需要下载一些必须的依赖项。 不同版本opencv依赖会有不同&#xff0c;具体见官网opencv安装 sudo apt-get install build-essential sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-…

AI大模型之花,绽放在鸿蒙沃土

随着生成式AI日益火爆&#xff0c;大语言模型能力引发了越来越多对于智慧语音助手的期待。 我们相信&#xff0c;AI大模型能力加持下的智慧语音助手一定会很快落地&#xff0c;这个预判不仅来自对AI大模型的观察&#xff0c;更来自对鸿蒙的了解。鸿蒙一定会很快升级大模型能力&…

拥抱创新:用Kotlin开发高效Android应用

拥抱创新&#xff1a;用Kotlin开发高效Android应用 引言 在当今数字时代&#xff0c;移动应用已经成为人们生活中不可或缺的一部分。无论是社交媒体、电子商务还是健康管理&#xff0c;移动应用已经深刻地影响了我们的生活方式。随着移动设备的普及和功能的增强&#xff0c;A…

Android getDrawable()和getColor()

Android getDrawable() 1.过时代码 虽然过时&#xff0c;但是不妨碍使用 context.getResources().getDrawable(R.drawable.xxx) 2.建议代码 context.getDrawable(R.drawable.xxx) 有API限制 3.最新代码 ContextCompat.getDrawable(getContext(), R.drawable.xxx); 有A…

安达发|模具制造业对APS软件需求大幅增长

近年来&#xff0c;中国模具工业以每年15%左右的增速速度快速发展。然而&#xff0c;对于大型、精密、复杂及长寿命模具的需求增长将远超过每年15%的增幅。为应对这一挑战&#xff0c;模具制造业对APS软件的需求大幅度增长&#xff0c;助力行业提速发展。 据统计&#xff0c;中…

linuxARM裸机学习笔记(3)----主频和时钟配置实验

引言&#xff1a;本文主要学习当前linux该如何去配置时钟频率&#xff0c;这也是重中之重。 系统时钟来源&#xff1a; 32.768KHz 晶振是 I.MX6U 的 RTC 时钟源&#xff0c; 24MHz 晶振是 I.MX6U 内核 和其它外设的时钟源 1. 7路PLL时钟源【都是从24MHZ的晶振PLL而来…

一个3年Android的找工作记录

作者&#xff1a;Petterp 这是我最近 1个月 的找工作记录&#xff0c;希望这些经历对你会有所帮助。 有时机会就像一阵风&#xff0c;如果没有握住&#xff0c;那下一阵风什么时候吹来&#xff0c;往往是个运气问题。 写在开始 先说背景: 自考本&#xff0c;3年经验&#xff0…

回归预测 | MATLAB实现SO-CNN-LSTM蛇群算法优化卷积长短期记忆神经网络多输入单输出回归预测

回归预测 | MATLAB实现SO-CNN-LSTM蛇群算法优化卷积长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现SO-CNN-LSTM蛇群算法优化卷积长短期记忆神经网络多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现SO-CNN-LS…

ASP.NET Core学习路线图

说明 1. 先决条件 - [C#](https://www.pluralsight.com/paths/csharp) - [Entity Framework](https://www.pluralsight.com/search?qentity%20framework%20core) - [ASP.NET Core](https://www.pluralsight.com/search?qasp.net%20core) - SQL基础知识 2. 通用开发技能 -…