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
#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)
6-8
6-9
#6-9
favorate_place = {'peter' : ['america'],'cary' : ['china','brazil','italy'],'diane' : ['india','france']
}
for name,places in favorate_place.items():if len(places) == 1:print(f"{name.title()}'s avorate place is {places[0].title()}!")elif len(places)>=2:print(f"{name.title()}'s favorate places are",end=" ")i=1for place in places:if i<=len(places)-1:print(f"{place.title()}",end=" and ")i+=1else:print(f"{place.title()}",end="!\n")else:print("error")
6-11
#6-11
cities = {'zibo':{'country':'china','num_people':9000,'food':'barbecue'},'jinan':{'country':'china','num_people':500,'food':'meet'},'qingdao':{'country':'china','num_people':6300,'food':'sea food'}
}
for city,city_info in cities.items():print(f"{city.title()}")for k,v in city_info.items():print(k,v)
相关文章:

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 遍历字…...

word转pdf两种方式(免费+收费)
一、免费方式 优点:1、免费;2、在众多免费中挑选出的转换效果相对较好,并且不用像openOffice那样安装服务 缺点:1、对字体支持没有很好,需要安装字体库或者使用宋体(对宋体支持很好)2、对于使…...

基于图像形态学处理的目标几何形状检测算法matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 .................................................... %二进制化图像 Images_bin imbinari…...
python系列教程211——map
朋友们,如需转载请标明出处:https://blog.csdn.net/jiangjunshow 声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享…...

SW - 3D打印件最好带上浮雕文字标记
文章目录 SW - 3D打印件最好带上浮雕文字标记概述笔记END SW - 3D打印件最好带上浮雕文字标记 概述 做了一些散料飞达的压板, 下了3D打印的单. 一共有10种压板, 每种压板做的数量不等.压板分为2个大的类(中间压板, 边上的压板), 每个类中分了5个子类, 子类之间只是一个高度方…...
Kafka-副本数量设置
1. ISR副本数量设置 指的是存活的副本数量 ISR 机制的另外一个相关参数是 min.insync.replicas , 可以在 broker 或者主题级别进行配置,代表 ISR 列表中至少要有几个可用副本。这里假设设置为 2,那么当可用副本数量小于该值时,就认为整个分…...

解决github打不开的方法
解决github打不开的方法 本文参考文章:解决可ping通但无法访问github网站的问题 一、确定域名github.com的ip地址 进入网址 IP/服务器github.com的信息 - 站长工具 (chinaz.com),查看 ip 地址。 20.205.243.166 github.com二、确定域名github.global.…...

【云原生】Docker中容器管理常用所有命令
1.docker 容器创建流程 2.容器运行本质 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 创建容器基本选项:--name:为容器命名 -i:交互式创建容器 -d:后台创建容器 -t:为容器分配伪终端 Docker 容器存在的意义就是为…...
Flutter video_player点击重新播放
视频播放完成之后,暂停视频,点击重新播放 import package:flutter/material.dart; import package:video_player/video_player.dart;class ListViewItemWidget extends StatefulWidget{overrideState createState() {return _ListViewItemWidgetState()…...
CSS3属性之text-overflow:ellipsis
语法: text-overflow:clip | ellipsis 默认值为clip 不显示省略标记 clip:当前对象内文本溢出时不显示省略标记,而是将溢出部分裁剪。 ellipsis:当对象内文本一处时显示省略标记(...)。 一、常见的单行文本溢出显示省略写法: text-overflow: ellipsis; …...

【深度学习_TensorFlow】梯度下降
写在前面 一直不太理解梯度下降算法是什么意思,今天我们就解开它神秘的面纱 写在中间 线性回归方程 如果要求出一条直线,我们只需知道直线上的两个不重合的点,就可以通过解方程组来求出直线 但是,如果我们选取的这两个点不在直…...
C++使用 auto 自动推断类型
C使用 auto 自动推断类型 在有些情况下, 根据赋给变量的初值, 很容易知道其类型。 例如, 如果将变量的初值设置成了 true,就可推断其类型为 bool。如果您使用的编译器支持 C11 和更高版本,可不显式地指定变量的类型&a…...
【前端面试手撕题】call、bind、new、freeze、浅拷贝
FED11 _call函数 描述 请补全JavaScript代码,要求实现Function.call函数的功能且该新函数命名为"_call"。 <!DOCTYPE html> <html><head><meta charset"UTF-8"><style>/* 填写样式 */</style> </head…...

MacBook Pro 16 M1 Max 升级 macOS Ventura 13.5 兼容测评
今天给大家带来了 MacBook Pro 16 M1 Max 升级 macOS Ventura 13.5 兼容 100 挑战赛 的视频,现在充电头再以文章的形式呈现给大家,让大家更清楚、直白的了解这款笔记本在升级系统后的兼容性如何。 MacBook Pro 16 M1 Max 配置了 140W 的 MagSafe 充电口&…...

实现5*5正方形网格x轴和y轴显示对应数值组件封装
实现5*5正方形网格x轴和y轴显示对应数值组件封装 需求:按5*5的正方形网格,根据目标数据的x和y轴值显示对应的文字,实现效果图如下:(当前目标数值:x2,y2) 代码如下: <…...
基于Matlab实现图像压缩技术(附上完整源码+图像+程序运行说明)
介绍 图像压缩是一种将图像数据压缩以减小文件大小的技术。在数字图像处理中,图像通常以像素阵列的形式表示。对于大型图像文件,传输和存储成本可能很高,因此图像压缩技术变得至关重要。在本文中,我们将介绍一种使用Matlab实现图…...
棒球联盟对于市场发展规划·棒球1号位
棒球联盟对于市场发展规划 1. 棒球联盟市场发展背景分析 在深入探讨棒球联盟市场发展背景之前,我们首先要明确,棒球,作为一种全球流行的体育项目,其在市场上的发展具有相当悠久的历史。棒球文化的起源可以追溯到上个世纪初&#…...

ansible控制主机和受控主机之间免密及提权案例
目录 案例描述 环境准备 案例一--免密远程控制主机 效果展示: 解决方案 1.添加主机 2.通过ssh-key生成密钥对 3.生成ssh-copy-id 4.验证 案例二-----免密普通用户提权 效果展示 解决方案 1.使用普通用户,与案例一 一样,进行发送密钥…...

flink1.17 eventWindow不要配置processTrigger
理论上可以eventtime processtime混用,但是下面代码测试发现bug,输入一条数据会一直输出. flink github无法提bug/问题. apache jira账户新建后竟然flink又需要一个账户,放弃 bug复现操作 idea运行代码后 往source kafka发送一条数据 a,1,1690304400000 可以看到无限输出…...

Python导出SqlServerl数据字典为excel
sql代码 SELECTtableName D.name ,tableIntroduce isnull(F.value, ),sort A.colorder,fieldName A.name,catogary B.name,bytes A.Length,lengths COLUMNPROPERTY(A.id, A.name, PRECISION),scales isnull(COLUMNPROPERTY(A.id, A.name, Scale), 0),isOrNotNull Cas…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...

如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...

android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

《信号与系统》第 6 章 信号与系统的时域和频域特性
目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...

Tauri2学习笔记
教程地址:https://www.bilibili.com/video/BV1Ca411N7mF?spm_id_from333.788.player.switch&vd_source707ec8983cc32e6e065d5496a7f79ee6 官方指引:https://tauri.app/zh-cn/start/ 目前Tauri2的教程视频不多,我按照Tauri1的教程来学习&…...
CppCon 2015 学习:Reactive Stream Processing in Industrial IoT using DDS and Rx
“Reactive Stream Processing in Industrial IoT using DDS and Rx” 是指在工业物联网(IIoT)场景中,结合 DDS(Data Distribution Service) 和 Rx(Reactive Extensions) 技术,实现 …...