Python入门(九)字典(二)

news2025/4/22 12:12:48

字典(二)

  • 1.遍历字典
    • 1.1 遍历所有键值对
    • 1.2 遍历字典中的所有键
    • 1.3 按特定顺序遍历字典中的所有键
  • 2.嵌套
    • 2.1 字典列表
    • 2.2 在字典中存储列表
    • 2.3 在字典中存储字典

作者:xiou

1.遍历字典

一个Python字典可能只包含几个键值对,也可能包含数百万个键值对。鉴于字典可能包含大量数据,Python支持对字典进行遍历。字典可用于以各种方式存储信息,因此有多种遍历方式:可遍历字典的所有键值对,也可仅遍历键或值。

1.1 遍历所有键值对

探索各种遍历方法前,先来看一个新字典,它用于存储有关网站用户的信息。下面的字典存储一名用户的用户名、名和姓:

user_0 = {
    'username': 'efermi',
    'first': 'enrico',
    'last': 'fermi',
    }

利用本章前面介绍过的知识,可访问user_0的任何一项信息,但如果要获悉该用户字典中的所有信息,该如何办呢?可使用for循环来遍历这个字典:

  user_0 = {
      'username': 'efermi',
      'first': 'enrico',
      'last': 'fermi',
      }

  for key, value in user_0.items():
      print(f"\nKey: {key}")
      print(f"Value: {value}")

如上所述,要编写遍历字典的for循环,可声明两个变量,用于存储键值对中的键和值。这两个变量可以使用任意名称。下面的代码使用了简单的变量名,这完全可行:

for语句的第二部分包含字典名和方法items(),它返回一个键值对列表。接下来,for循环依次将每个键值对赋给指定的两个变量。在本例中,使用这两个变量来打印每个键及其相关联的值。第一个函数调用print()中的"\n"确保在输出每个键值对前都插入一个空行:
在这里插入图片描述

字典存储的是不同人的同一种信息。对于类似这样的字典,遍历所有的键值对很合适。如果遍历字典favorite_languages,将得到其中每个人的姓名和喜欢的编程语言。由于该字典中的键都是人名,值都是语言,因此在循环中使用变量name和language,而不是key和value。

1.2 遍历字典中的所有键

在不需要使用字典中的值时,方法keys()很有用。下面来遍历字典favorite_languages,并将每个被调查者的名字都打印出来:

  favorite_languages = {
      'jen': 'python',
      'sarah': 'c',
      'edward': 'ruby',
      'phil': 'python',
      }

  for name in favorite_languages.keys():
      print(name.title())

代码行让Python提取字典favorite_languages中的所有键,并依次将它们赋给变量name。输出列出了每个被调查者的名字:
在这里插入图片描述

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

从Python 3.7起,遍历字典时将按插入的顺序返回其中的元素。不过在有些情况下,你可能要按与此不同的顺序遍历字典。

要以特定顺序返回元素,一种办法是在for循环中对返回的键进行排序。为此,可使用函数sorted()来获得按特定顺序排列的键列表的副本:

favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
    }

for name in sorted(favorite_languages.keys()):
    print(f"{name.title()}, thank you for taking the poll.")

这条for语句类似于其他for语句,不同之处是对字典方法keys()的结果调用了函数sorted()。这让Python列出字典中的所有键,并在遍历前对这个列表进行排序。输出表明,按顺序显示了所有被调查者的名字:

在这里插入图片描述

2.嵌套

有时候,需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为嵌套。你可以在列表中嵌套字典、在字典中嵌套列表甚至在字典中嵌套字典。正如下面的示例将演示的,嵌套是一项强大的功能。

2.1 字典列表

字典alien_0包含一个外星人的各种信息,但无法存储第二个外星人的信息,更别说屏幕上全部外星人的信息了。如何管理成群结队的外星人呢?一种办法是创建一个外星人列表,其中每个外星人都是一个字典,包含有关该外星人的各种信息。例如,下面的代码创建一个包含三个外星人的列表:

  alien_0 = {'color': 'green', 'points': 5}
  alien_1 = {'color': 'yellow', 'points': 10}
  alien_2 = {'color': 'red', 'points': 15}

  aliens = [alien_0, alien_1, alien_2]

  for alien in aliens:
      print(alien)

首先创建三个字典,其中每个字典都表示一个外星人。然后在将这些字典都存储到一个名为aliens的列表中。最后,遍历这个列表,并将每个外星人都打印出来:

在这里插入图片描述

2.2 在字典中存储列表

有时候,需要将列表存储在字典中,而不是将字典存储在列表中。例如,你如何描述顾客点的比萨呢?如果使用列表,只能存储要添加的比萨配料;但如果使用字典,就不仅可在其中包含配料列表,还可包含其他有关比萨的描述。

在下面的示例中,存储了比萨的两方面信息:外皮类型和配料列表。配料列表是一个与键’toppings’相关联的值。要访问该列表,我们使用字典名和键’toppings’,就像访问字典中的其他值一样。这将返回一个配料列表,而不是单个值:

  # 存储所点比萨的信息。
  pizza = {
      'crust': 'thick',
      'toppings': ['mushrooms', 'extra cheese'],
      }

  # 概述所点的比萨。
  print(f"You ordered a {pizza['crust']}-crust pizza "
      "with the following toppings:")

  for topping in pizza['toppings']:
      print("\"f+topping)

首先创建一个字典,其中存储了有关顾客所点比萨的信息。在这个字典中,一个键是’crust’,与之相关联的值是字符串’thick’;下一个键是’toppings’,与之相关联的值是一个列表,其中存储了顾客要求添加的所有配料。制作前,我们概述了顾客所点的比萨。
如果函数调用print()中的字符串很长,可以在合适的位置分行。只需要在每行末尾都加上引号,同时对于除第一行外的其他各行,都在行首加上引号并缩进。这样,Python将自动合并圆括号内的所有字符串。为打印配料,编写一个for循环。为访问配料列表,使用键’toppings’,这样Python将从字典中提取配料列表。

在这里插入图片描述

2.3 在字典中存储字典

可在字典中嵌套字典,但这样做时,代码可能很快复杂起来。例如,如果有多个网站用户,每个都有独特的用户名,可在字典中将用户名作为键,然后将每位用户的信息存储在一个字典中,并将该字典作为与用户名相关联的值。在下面的程序中,存储了每位用户的三项信息:名、姓和居住地。为访问这些信息,我们遍历所有的用户名,并访问与每个用户名相关联的信息字典:

  users = {
      'aeinstein': {
          'first': 'albert',
          'last': 'einstein',
          'location': 'princeton',
          },

      'mcurie': {
          'first': 'marie',
          'last': 'curie',
          'location': 'paris',
          },

      }for username, user_info in users.items():print(f"\nUsername: {username}")
❸     full_name = f"{user_info['first']} {user_info['last']}"
      location = user_info['location']print(f"\tFull name: {full_name.title()}")
      print(f"\tLocation: {location.title()}")

首先定义一个名为users的字典,其中包含两个键:用户名’aeinstein’和’mcurie’。与每个键相关联的值都是一个字典,其中包含用户的名、姓和居住地。在❶处,遍历字典users,让Python依次将每个键赋给变量username,并依次将与当前键相关联的字典赋给变量user_info。在循环内部的❷处,将用户名打印出来。

在❸处,开始访问内部的字典。变量user_info包含用户信息字典,而该字典包含三个键:‘first’、‘last’和’location’。对于每位用户,都使用这些键来生成整洁的姓名和居住地,然后打印有关用户的简要信息(见❹):

Username: aeinstein
    Full name: Albert Einstein
    Location: Princeton

Username: mcurie
    Full name: Marie Curie
    Location: Paris

请注意,表示每位用户的字典都具有相同的结构。虽然Python并没有这样的要求,但这使得嵌套的字典处理起来更容易。倘若表示每位用户的字典都包含不同的键,for循环内部的代码将更复杂。

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

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

相关文章

【源码解析】SpringBoot自定义条件及@Conditional源码解析

自定义注解 自定义条件类 public class MessageCondition extends SpringBootCondition {Overridepublic ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata metadata) {MultiValueMap<String, Object> attrs metadata.getAllAnnota…

成年人的崩溃只在一瞬间,程序员凌晨三点写的代码竟被女友删了...

对于恋爱中的情侣来说&#xff0c;吵架是很正常的事情&#xff0c;就算是再怎么亲密&#xff0c;也难免会出现意见不合的时候。 吵架不可怕&#xff0c;可怕的是&#xff0c;受吵架情绪的影响&#xff0c;做出一些比较“极端”的事情。 之前某社交平台上一位女生吐槽自己的男…

Ubuntu 本地部署 Stable Diffusion web UI

Ubuntu 本地部署 Stable Diffusion web UI 0. 什么是 Stable Diffusion1. 什么是 Stable Diffusion web UI2. Github 地址3. 安装 Miniconda34. 创建虚拟环境5. 安装 Stable Diffusion web UI6. 启动 Stable Diffusion web UI7. 访问 Stable Diffusion web UI8. 其他 0. 什么是…

我这里取出来的数据(最后边的excel)有点问题,我没有要取性别的数据,但是表里有...

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 上穷碧落下黄泉&#xff0c;两处茫茫皆不见。 大家好&#xff0c;我是皮皮。 一、前言 前几天在Python钻石群【不争】问了一个Python自动化办公的问题&…

PyCharm安装教程,图文教程(超详细)

「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 PyCharm 一、PyCharm下载安装二、Python下载安装三、创建项目四、安装模块1、pip安装2、P…

商城系统商品属性的数据库设计思路

京东商城的数据库是如何搭建的&#xff0c;那么多商品&#xff0c;每种商品的参数各不相同&#xff0c;是怎样设计数据库的&#xff1f; 在提及这种设计思路前&#xff0c;首先得了解数据表可以分为两种结构: 1\横表,也就是我们经常用到的表结构&#xff0c; 2\纵表,这种结构…

ASEMI代理LT8609AJDDM#WTRPBF原装ADI车规级芯片

编辑&#xff1a;ll ASEMI代理LT8609AJDDM#WTRPBF原装ADI车规级芯片 型号&#xff1a;LT8609AJDDM#WTRPBF 品牌&#xff1a;ADI /亚德诺 封装&#xff1a;DFN-10 批号&#xff1a;2023 安装类型&#xff1a;表面贴装型 引脚数量&#xff1a;10 工作温度:-40C~125C 类型…

MySQL学习---13、存储过程与存储函数

1、存储过程概述 MySQL从5.0版本开始支持存储过程和函数。存储过程和函数能够将负杂的SQL逻辑封装在一起&#xff0c;应用程序无序关注存储过程和函数内部复杂的SQL逻辑&#xff0c;而只需要简单的调用存储过程和函数就可以。 1.1 理解 含义&#xff1a;存储过程的英文是Sto…

ASEMI代理LTC2954CTS8-2#TRMPBF原装ADI车规级芯片

编辑&#xff1a;ll ASEMI代理LTC2954CTS8-2#TRMPBF原装ADI车规级芯片 型号&#xff1a;LTC2954CTS8-2#TRMPBF 品牌&#xff1a;ADI/亚德诺 封装&#xff1a;TSOT-23-8 批号&#xff1a;2023 引脚数量&#xff1a;23 工作温度&#xff1a;-40C~85C 安装类型&#xff1a…

若依框架(RuoYI)项目打包(jar)方法,部署到 Linux 服务器

序言 在若依框架的 bin 目录下&#xff0c;存在着三个 bat 文件&#xff0c;一个是清除之前的依赖的自动化 bat 脚本&#xff08;clean.bat&#xff09;&#xff0c;一个是自动化项目打包的 bat 脚本&#xff08;package.bat&#xff09;&#xff0c;一个是运行若依项目的脚本…

云原生CAx软件:技术约束

Pivotal公司的Matt Stine于2013年首次提出Cloud Native(云原生)的概念&#xff0c;从概念提出到技术落地&#xff0c;云原生还处于不断发展过程中&#xff0c;关于云原生的定义也不断在完善。 云原生为使用开源软件堆栈来创建容器化、动态编排和面向微服务的应用程序。 Heroku创…

YOLOv8 深度解析!一文看懂,快速上手实操(附实践代码)

关注并星标 从此不迷路 计算机视觉研究院 公众号ID&#xff5c;ComputerVisionGzq 学习群&#xff5c;扫码在主页获取加入方式 开源地址&#xff1a;https://github.com/ultralytics/ultralytics 计算机视觉研究院专栏 作者&#xff1a;Edison_G YOLOv8 是 ultralytics 公司在 …

消息队列测试场景和redis测试场景

一、消息队列测试场景 1、什么是消息队列。你是怎么测试的&#xff1f; 解题思路&#xff1a; 什么是消息队列。 消息队列应用场景。 消息队列测试点列举。 2、什么是消息队列 Broker&#xff1a;消息服务器&#xff0c;提供消息核心服务 Producer&#xff1a;消息生产者&a…

Python入门(八)字典(一)

字典&#xff08;一&#xff09; 1.字典概述2.一个简单的字典3.使用字典3.1 访问字典中的值3.2添加键值对3.3 先创建一个空字典3.4 修改字典中的值3.5 删除键值对 作者&#xff1a;xiou 1.字典概述 在本章中&#xff0c;你将学习能够将相关信息关联起来的Python字典&#xff…

二叉排序树查找成功和不成功的平均查找长度

理解二叉树的特性: 1)结点:包含一个数据元素及若干指向子树分支的信息。 2)结点的度:一个结点拥有子树的数据成为结点的度。 3)叶子结点:也称为终端结点,没有子树的结点或者度为零的结点。 4)分支结点:也称为非终端结点,度不为零的结点成为非终端结点。 5)结点…

视觉检测设备主要有哪几分类

在如今的工业4.0时代&#xff0c;整个行业都在加速智能制造的脚步&#xff0c;此时我们就不得不说其其中重要的环节——视觉检测&#xff0c;本身其只是属于机器视觉中一个应用的分支&#xff0c;但是因其应用广泛&#xff0c;久而久之很多工厂行业的从业者在遇到需要外观检测问…

GDB 的简单使用

GDB 的简单使用 一、启动调试二、常用调试命令1.list&#xff08;显示程序源代码&#xff09;2.break、tbreak、delete、disable、enable 和 info break&#xff08;断点操作&#xff09;3.run&#xff08;运行源程序&#xff09;4.next 和 step&#xff08;单步调试&#xff0…

大型语言模型 (LLM) 的两条发展路线:Finetune v.s. Prompt

前言 如果你对这篇文章感兴趣&#xff0c;可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」&#xff0c;查看完整博客分类与对应链接。 在大型语言模型的研究中&#xff0c;研究者对其有两种不同的期待&#xff0c;也可以理解为是两种不同的路线&#xff0c;具…

【LeetCode: 494. 目标和 | 暴力递归=>记忆化搜索=>动态规划 | 背包模型】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

【Spring框架三】——Spirng IOC和DI的实现

系列文章目录 【Spring框架一】——Spring框架简介 Spirng IOC和DI的实现 系列文章目录前言一、IDEA新建Spring 项目二、使用XML文件的方式实现IOC和DI1.创建XML文件2. 通过构造函数的方式进行注入运行结果3.setter方法进行注入 三、使用注解的方式实现IOC和DISpring 5中的常用…