当前位置: 首页 > news >正文

使用yield压平嵌套字典有多简单?

我们经常遇到各种字典套字典的数据,例如:

nest_dict = {'a': 1,'b': {'c': 2,'d': 3,'e': {'f': 4}},'g': {'h': 5},'i': 6,'j': {'k': {'l': {'m': 8}}}
}

有没有什么简单的办法,把它压扁,变成:

{'a': 1,'b_c': 2,'b_d': 3,'b_e_f': 4,'g_h': 5,'i': 6,'j_k_l_m': 8
}

你肯定想到了使用递归来解决这个问题,那么你可以试一试,看看你的递归函数有多少行代码。

今天,我们使用yield关键字来实现这个需求,在不炫技的情况下,只需要8行代码。在炫技的情况下,只需要3行代码。

要快速地把这个嵌套字典压扁,我们需要从下网上来处理字段。例如对于b->e->f->4这条路径,我们首先把最里面的{'f': 4}转换为一个元组('f', 4)。然后,把这个元组向上抛出,于是得到了元组('e', ('f', 4))。我们把 e拼接到f的前面,变为:('e_f', 4),继续往上抛出,得到('b', ('e_f', 4))。再把b拼接到e_f上面,得到('b_e_f', 4)。完成一条线路的组装。

这个逻辑如果使用yield关键字来实现,就是:

def flat(x):for key, value in x.items():if isinstance(value, dict):for k, v in flat(value):k = f'{key}_{k}'yield (k, v)else:yield (key, value)

运行结果如下图

通过使用 yield关键字,字典的key会像是在流水线上一样,一层一层从内向外进行组装,从而形成完整的路径。

相关文章:

使用yield压平嵌套字典有多简单?

我们经常遇到各种字典套字典的数据,例如: nest_dict {a: 1,b: {c: 2,d: 3,e: {f: 4}},g: {h: 5},i: 6,j: {k: {l: {m: 8}}} } 有没有什么简单的办法,把它压扁,变成: {a: 1,b_c: 2,b_d: 3,b_e_f: 4,g_h: 5,i: 6,j_k_l_…...

express中使用morgan打印请求数据日志文件,按日期分割

使用morgan可以打印日志,但是要分割日志文件就需要使用file-stream-rotator,下面介绍使用方法: 1.安装2个依赖 npm i morgan file-stream-rotator 2.在入口文件app.js中引入相关插件 var express require("express"); var fs require("fs"); var pat…...

干货 | 2024 AI+智慧城市安全解决方案白皮书(免费下载)

导读:新型智慧城市是推动城市治理体系和治理能力现代化、提升城市居民幸 福感和满意度的新理念和新路径,也是网络强国建设和数字经济发展的重要载体。随着 AI 技术的不断发展和在智慧城市智领域广泛的应用,人们享受技 术红利的同时&#xff0…...

超越 React Query:探索更高效的数据请求策略

我们常常遇到组件间通信的难题。你是否也曾为如何优雅地在组件间传递信息而头疼?今天,我想和大家分享一个让我眼前一亮的解决方案——使用 alova。 跨组件触发请求的挑战 如果你正在构建一个电商应用,用户在更新了购物车后,需要…...

Scala trait

一.trait 基本使用 idea实例 二.实现单个特质 三.实现多个特质 idea实例 四.特质成员的处理方式...

AI大法之C语言哈希表算法比较两个文件去重

最近朋友在工作上遇到了一个问题,经常需要比对两个文件,筛选出文件中不同的订单号。比如有两个文件:计费.txt 和 受理.txt,文件中每一行都是一个订单号,需要找出计费.txt文件中有而受理.txt文件中没有的单号和计费.txt…...

Scala 提取器(Extractor)

Scala 提取器(Extractor) Scala 提取器(Extractor)是一个非常有用的特性,它允许你为任何类型定义自定义的解构赋值语法。在Scala中,提取器是一种用于从对象中提取值的工具,它可以帮助你以一种更直观和声明式的方式处理数据。本文将详细介绍Scala提取器的工作原理、使用场景…...

【主机漏洞扫描常见修复方案】:Tomcat安全(机房对外Web服务扫描)

文章目录 引言I SSL/TLS Not ImplementedTomcat 服务器 SSL 证书安装部署(JKS 格式)Tomcat 服务器 SSL 证书安装部署(PFX 格式)HTTP 自动跳转 HTTPS 的安全配置(可选)修复SSL证书版本低II 主机漏洞扫描常见修复方案Apache JServ protocol serviceSlow HTTP DEnial of Ser…...

MySQL数据库之——事务(Transaction)详解

一、MySQL 事务定义 MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在银行管理系统中,用户张三向李四账户转账的操作,账户转账是一个完整的业务,最小的单元,不可再分,这样&#xff0c…...

LabVIEW提高开发效率技巧----事件日志记录

在LabVIEW开发中,集成事件日志记录系统是提升程序调试效率和确保系统运行稳定的关键步骤。通过记录关键操作和异常事件,开发人员可以快速定位问题、优化程序性能,并确保系统的稳定性和可靠性。 1. 事件日志的作用 事件日志是指在程序运行过…...

整合XXL-Job任务调度平台

创建数据库 tables_xxl_job.sql 引入依赖 <dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.4.0</version> </dependency>编写配置文件 server:port: 8081xxl:job:admin:# 这…...

hi3536上ffmpeg带rtmp移植

1.下载ffmpeg-4.1.3版本源码包 用下面的脚本进行configure&#xff1a; ./configure \--target-oslinux \--prefix./libs/ \--enable-cross-compile \--archarm \--ccarm-hisiv500-linux-gcc \--cross-prefixarm-hisiv500-linux- \--nmarm-hisiv500-linux-nm \--enable-share…...

在PHP中,读取大文件

在PHP中&#xff0c;读取大文件可以采用以下几种方法&#xff1a; 1. 使用fopen和fread函数&#xff1a;这是最基本的文件读取方法&#xff0c;可以逐行读取大文件。首先使用fopen函数打开文件&#xff0c;然后使用fread函数指定读取的字节数&#xff0c;逐行读取文件内容并进…...

N-gram详解

文章目录 一、什么是N-gram?二、N-gram的种类三、优缺点PS&#xff1a;补充 一、什么是N-gram? 在自然语言处理中&#xff0c;n-gram是一种重要的文本表示方法。n-gram是指给定文本中连续的n个项目&#xff0c;这些项目可以是声音、单词、字符或者像素等。n-gram模型常常用于…...

电路中的电源轨及地的区别和处理

电源轨 VCC 通常代指正电源供电轨。在大多数数字和模拟电路中&#xff0c;VCC代表电路中的正电源端。VCC提供电路所需的正电压&#xff0c;通常是用来驱动晶体管、集成电路。 VDD 相对与VCC的正电源供应&#xff0c;VDD更常用于表示数字电路中的正电源引脚。VDD常见于集成电…...

k8s可以部署私有云吗?私有云部署全攻略

k8s可以部署私有云吗&#xff1f;K8S可以部署私有云。Kubernetes是一个开源的容器编排引擎&#xff0c;能够自动化容器的部署、扩展和管理&#xff0c;使得应用可以在各种环境中高效运行。通过使用Kubernetes&#xff0c;企业可以在自己的数据中心或私有云环境中搭建和管理容器…...

编辑器资源管理器

解释 EditorResMgr 是一个用于在 Unity 编辑器中加载资源的管理器。它通过 Unity 编辑器的 API (AssetDatabase) 进行资源加载&#xff0c;但仅在开发和编辑模式下可用&#xff0c;不能在最终发布的游戏中使用。这种工具通常用来在开发过程中快速加载编辑器中的资源&#xff0…...

高性能数据分析利器DuckDB在Python中的使用

DuckDB具有极强的单机数据分析性能表现&#xff0c;功能丰富&#xff0c;具有诸多拓展插件&#xff0c;且除了默认的SQL查询方式外&#xff0c;还非常友好地支持在Python、R、Java、Node.js等语言环境下使用&#xff0c;特别是在Python中使用非常的灵活方便。 安装 pip insta…...

IAR全面支持旗芯微车规级MCU,打造智能安全的未来汽车

中国上海&#xff0c;2024年10月18日 — 在全球汽车电子快速发展的今天&#xff0c;IAR与苏州旗芯微半导体有限公司&#xff08;以下简称“旗芯微”&#xff09;联合宣布了一项激动人心的合作——IAR Embedded Workbench for Arm 9.60.2版本现已全面支持旗芯微车规级MCU&#x…...

**深入浅出:TOGAF中的应用架构**

摘要&#xff1a; 在企业架构&#xff08;EA&#xff09;领域&#xff0c;TOGAF&#xff08;The Open Group Architecture Framework&#xff09;是一个广泛应用的框架。本文将带你深入了解TOGAF中的应用架构&#xff0c;帮助你理解其核心概念和实际应用。无论你是初学者还是有…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

stm32wle5 lpuart DMA数据不接收

配置波特率9600时&#xff0c;需要使用外部低速晶振...

Modbus RTU与Modbus TCP详解指南

目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...

Vue3 PC端 UI组件库我更推荐Naive UI

一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用&#xff0c;前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率&#xff0c;还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库&#xff08;Naive UI、Element …...

客户案例 | 短视频点播企业海外视频加速与成本优化:MediaPackage+Cloudfront 技术重构实践

01技术背景与业务挑战 某短视频点播企业深耕国内用户市场&#xff0c;但其后台应用系统部署于东南亚印尼 IDC 机房。 随着业务规模扩大&#xff0c;传统架构已较难满足当前企业发展的需求&#xff0c;企业面临着三重挑战&#xff1a; ① 业务&#xff1a;国内用户访问海外服…...