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=1
        for place in places:
            if i<=len(places)-1:
                print(f"{place.title()}",end=" and ")
                i+=1
            else:
                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)

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AWS Amplify 部署node版本18报错修复

Amplify env&#xff1a;Amazon Linux:2 Build Error : Specified Node 18 but GLIBC_2.27 or GLIBC_2.28 not found on build 一、原因 报错原因是因为默认情况下&#xff0c;AWS Amplify 使用 Amazon Linux:2 作为其构建镜像&#xff0c;并自带 GLIBC 2.26。不过&#xff0c;…

专业运动耳机哪个牌子好、专业运动耳机推荐

运动和音乐天生就是绝佳的组合&#xff0c;因此对于很多运动爱好者来说&#xff0c;耳机一直都是必备之物。通过音乐的陪伴&#xff0c;我们的运动过程变得更加有节奏感。一款出色的运动耳机需要满足舒适的佩戴感、稳固的固定性以及防水的特性。作为一个对运动耳机有着丰富经验…

Gradle-02:问题Plugin with id ‘maven‘ not found

1. 背景 在一次使用 Gradle 构建自己项目&#xff0c;完事&#xff0c;需要上传到本地 Maven 仓库&#xff0c;因为事先并不清楚 apply plugin: maven 插件已经被 Gradle 移除&#xff0c;找了一圈&#xff0c;才找到解决方案。 2. 原因 apply plugin: maven def localRepo f…

Rookit系列一 【隐藏网络端口】【支持Win7 x32/x64 ~ Win10 x32/x64】

文章目录 Rookit系列一 【隐藏网络端口】【支持Win7 x32/x64 ~ Win10 x32/x64】前言探究隐藏网络端口netstat分析隐藏网络端口的原理关键数据结构隐藏网络端口源码 效果演示 Rookit系列一 【隐藏网络端口】【支持Win7 x32/x64 ~ Win10 x32/x64】 前言 Rookit是个老生常谈的话…

如何从零开始配置前端环境以及安装必备的软件插件

文章目录 前言一、VSCode&#xff08;Visual Studio Code&#xff09;1.1 VSCode介绍与安装1.2 VSCode 常用插件安装1.3 VSCode代码格式化 二、Node.js2.1 Node的介绍与安装2. yarn的安装 三、Webpcak3.1 Webpcak的介绍与安装 四、Vue CLI4.1 Vue CLI的安装与介绍 五、初始化Vu…

【力扣】206. 反转链表 <链表指针>

【力扣】206. 反转链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 示例 2 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1] 示例 3 输入&#xff1a…

problem(3):python IDE和python解释器

为什么写这篇文章呢&#xff1f;遇到了下面的问题&#xff0c;相同的解释器&#xff0c;如果运行angr库的代码&#xff0c;会出现 这样的情况&#xff0c;但是用spyder IDE 会显示正常&#xff0c;很奇怪 应该就是IDE的原因 IDE的循环导入问题 检查IDE配置&#xff1a; 如果可…

pytorch的CrossEntropyLoss交叉熵损失函数默认是平均值

pytorch中使用nn.CrossEntropyLoss()创建出来的交叉熵损失函数计算损失默认是求平均值的&#xff0c;即多个样本输入后获取的是一个均值标量&#xff0c;而不是样本大小的向量。 net nn.Linear(4, 2) loss nn.CrossEntropyLoss() X torch.rand(10, 4) y torch.ones(10, dt…

Grafana集成prometheus(3.Grafana添加promethus数据)

添加数据库 选择Connections -> Datasources&#xff0c;点击Add New data source&#xff0c;填写Promitheus Server Url,点击 save & test完成配置 添加DashBorad 选择prometheus数据库选择code填入对应的查询公式(监控公式参考Prometheus监控公式)修改面板名称Ti…

华为OD机试之报文重排序(Java源码)

题目描述 对报文进行重传和重排序是常用的可靠性机制&#xff0c;重传缓中区内有一定数量的子报文&#xff0c;每个子报文在原始报文中的顺序已知&#xff0c;现在需要恢复出原始报文。 输入描述 输入第一行为N&#xff0c;表示子报文的个数&#xff0c;0 &#xff1c;N ≤ 100…

ubuntu搭建wifi热点,共享网络(x86、arm相同)

目录 1 首先检查网络管理器服务是否开启 &#xff08;ubuntu需要界面&#xff09; 2 创建并配置需要共享的wifi 首先&#xff0c;明确下这篇文章说的是啥&#xff0c;是为了在ubuntu系统的电脑上&#xff0c;搭建一个wifi热点&#xff0c;供其他移动设备连接上网。就像你…

VMware workstation怎么识别移动硬盘?

右键“我的电脑”->管理->服务-> VMware USB Arbitration Service-> 属性->启动 重启VMware&#xff0c;可移动设备->移动硬盘->连接

Redis持久化机制

AOF 把对redis的写操作记录下来&#xff0c;先执行命令&#xff0c;再执行写入&#xff0c;优势在于&#xff1a; 当然也有风险&#xff1a;丢失和对下一个命令造成阻塞 丢失的原因是执行写操作和记录日志是两个过程 下一个命令造成阻塞的原因是两个过程是同步的 第二个问…

通俗理解大模型的各大微调方法:从LoRA、QLoRA到P-Tuning V1/V2

前言 PEFT 方法仅微调少量(额外)模型参数&#xff0c;同时冻结预训练 LLM 的大部分参数 第一部分 高效参数微调的发展史 1.1 Google之Adapter Tuning&#xff1a;嵌入在transformer里 原有参数不变 只微调新增的Adapter 谷歌的研究人员首次在论文《Parameter-Efficient Tran…

RabbitMQ输出日志配置

参考地址rabbitmq启用日志功能记录消息队列收发情况_rabbitmq开启日志_普通网友的博客-CSDN博客 启用日志插件命令 # 设置用户权限 rabbitmqctl set_user_tags mqtt-user administrator rabbitmqctl set_permissions -p / mqtt-user ".*" ".*" ".*&…

《命运》阅读笔记

《命运》阅读笔记 2023年5月17号在杭州的小屋读完&#xff0c;我读完后&#xff0c;脑海里经常把余华的《活着》和这本《命运》的故事情节搞混淆&#xff0c;几乎都是讲着生活的苦难。全文以阿太&#xff08;外婆的妈妈&#xff09;的视角&#xff0c;在她九十九岁的人生里&…

利用PostGIS自带工具导入shp数据

一、shapefile导入PostGIS 1、利用PostGIS自带工具导入 开始程序搜索如下工具 打开工具界面如下图&#xff0c;点击View conncetion details进行数据库连接&#xff0c;点击Add File进行Shapefile所在路径加载&#xff0c;点击Option进行编码设置&#xff0c;设置完成后点击Im…

数据安全与可追溯:PDM系统的信息保护锦囊

在当今数字化时代&#xff0c;数据安全与可追溯是企业管理中至关重要的环节。PDM系统&#xff08;Product Data Management&#xff0c;产品数据管理&#xff09;作为一款强大的数字化工具&#xff0c;为企业提供了全方位的信息保护锦囊。让我们一同深入探讨&#xff0c;看看PD…

半导体制造工艺流程

本资料仅用于学习和讨论&#xff0c;如有侵权请反应 1、半导体制造工艺流程-要求 1.1 英特尔50亿纳米的制作工艺 2、第一步 晶圆加工 2.1 第一步 晶圆加工 2.2 第二步 氧化 2.3 第三步 光刻 2.4第四步 刻蚀 2.5 第五步 薄膜沉积 2.6 第六步 互连 2.7 第七步 测试 2.8…

【网络基础实战之路】基于MGRE多点协议的实战详解

系列文章传送门&#xff1a; 【网络基础实战之路】设计网络划分的实战详解 【网络基础实战之路】一文弄懂TCP的三次握手与四次断开 【网络基础实战之路】基于MGRE多点协议的实战详解 【网络基础实战之路】基于OSPF协议建立两个MGRE网络的实验详解 PS&#xff1a;本要求基于…