python使用yield压平嵌套字典的超简单方法


Posted in Python onNovember 02, 2019

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

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)

运行结果如下图所示:

python使用yield压平嵌套字典的超简单方法

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

在下一篇文章中,我们继续使用yield关键字来解决字典与列表混合嵌套的情况。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python if not in 多条件判断代码
Sep 21 Python
python制作小说爬虫实录
Aug 14 Python
python实现画五角星和螺旋线的示例
Jan 20 Python
使用Python计算玩彩票赢钱概率
Jun 26 Python
Python利用WMI实现ping命令的例子
Aug 14 Python
djano一对一、多对多、分页实例代码
Aug 16 Python
Pytorch加载部分预训练模型的参数实例
Aug 18 Python
使用Python生成200个激活码的实现方法
Nov 22 Python
Python如何使用函数做字典的值
Nov 30 Python
Python导入父文件夹中模块并读取当前文件夹内的资源
Nov 19 Python
python全栈开发语法总结
Nov 22 Python
Python数据分析入门之教你怎么搭建环境
May 13 Python
基于python实现从尾到头打印链表
Nov 02 #Python
pandas 空数据处理方法详解
Nov 02 #Python
python pyinstaller打包exe报错的解决方法
Nov 02 #Python
python自动生成model文件过程详解
Nov 02 #Python
python__name__原理及用法详解
Nov 02 #Python
简单了解python中的f.b.u.r函数
Nov 02 #Python
如何在python中实现随机选择
Nov 02 #Python
You might like
mcrypt启用 加密以及解密过程详细解析
2013/08/07 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
Codeigniter里的无刷新上传的实现代码
2019/04/14 PHP
js控制框架刷新
2008/08/01 Javascript
Js 随机数产生6位数字
2010/05/13 Javascript
判断目标是否是window,document,和拥有tagName的Element的代码
2010/05/31 Javascript
基于JQUERY的多级联动代码
2012/01/24 Javascript
浅析return false的正确使用
2013/11/04 Javascript
js中取得变量绝对值的方法
2015/01/03 Javascript
AngularJS使用ngMessages进行表单验证
2015/12/27 Javascript
js实现密码强度检测【附示例】
2016/03/30 Javascript
浅谈jQuery中ajaxPrefilter的应用
2016/08/01 Javascript
JavaScript使用键盘输入控制实现数字验证功能
2016/08/19 Javascript
jQuery  ready方法实现原理详解
2016/10/19 Javascript
JavaScript中最常见的三个面试题解析
2017/03/04 Javascript
jQuery实现的简单前端搜索功能示例
2017/10/28 jQuery
原生JS实现的双色球功能示例
2018/02/02 Javascript
关于TypeScript模块导入的那些事
2018/06/12 Javascript
React 无状态组件(Stateless Component) 与高阶组件
2018/08/14 Javascript
Async/Await替代Promise的6个理由
2019/06/15 Javascript
关于Vue中axios的封装实例详解
2019/10/20 Javascript
python中set()函数简介及实例解析
2018/01/09 Python
python使用matplotlib模块绘制多条折线图、散点图
2020/04/26 Python
python3 map函数和filter函数详解
2019/08/26 Python
利用HTML5的新特点实现图片文件异步上传
2014/05/29 HTML / CSS
中国跨境海淘网站:考拉海购
2016/08/01 全球购物
美国最顶级的精品店之一:Hampden Clothing
2016/12/22 全球购物
中药专业毕业自荐书范文
2014/02/08 职场文书
机关节能减排实施方案
2014/03/17 职场文书
乡镇干部个人整改措施思想汇报
2014/10/10 职场文书
教师批评与自我批评发言稿
2014/10/15 职场文书
实习工作表现评语
2014/12/31 职场文书
《地震中的父与子》教学反思
2016/02/16 职场文书
Python中for后接else的语法使用
2021/05/18 Python
解决Pytorch中关于model.eval的问题
2021/05/22 Python
Apache Hudi的多版本清理服务彻底讲解
2022/03/31 Servers