Python构造自定义方法来美化字典结构输出的示例


Posted in Python onJune 16, 2016

示例:

d = { "root": { "folder2": { "item2": None, "item1": None }, "folder1": { "subfolder1": { "item2": None, "item1": None }, "subfolder2": { "item3": None } } } }

美观输出是:

Python构造自定义方法来美化字典结构输出的示例

观察一下特点:
1.同一level的key左对齐,即indent相同。
2.在,号后换行。
3.如果value是字典,即嵌套字典,则嵌套字典在下一个level,每一个level的key的indent都不一样。

思路分析:
这是个"拼接字符串"问题,元素有""{}:,\n和空格indent。
遍历一个个(k, v)键值对,拼接yield起来,遇到嵌套字典就递归,即递归+yield。

上代码。

#coding=utf-8 
def pretty_dict(obj, indent=' '): 
 def _pretty(obj, indent): 
  for i, tup in enumerate(obj.items()): 
   k, v = tup 
   #如果是字符串则拼上"" 
   if isinstance(k, basestring): k = '"%s"'% k 
   if isinstance(v, basestring): v = '"%s"'% v 
   #如果是字典则递归 
   if isinstance(v, dict): 
    v = ''.join(_pretty(v, indent + ' '* len(str(k) + ': {')))#计算下一层的indent 
   #case,根据(k,v)对在哪个位置确定拼接什么 
   if i == 0:#开头,拼左花括号 
    if len(obj) == 1: 
     yield '{%s: %s}'% (k, v) 
    else: 
     yield '{%s: %s,\n'% (k, v) 
   elif i == len(obj) - 1:#结尾,拼右花括号 
    yield '%s%s: %s}'% (indent, k, v) 
   else:#中间 
    yield '%s%s: %s,\n'% (indent, k, v) 
 print ''.join(_pretty(obj, indent)) 
 
d = { "root": { "folder2": { "item2": None, "item1": None }, "folder1": { "subfolder1": { "item2": None, "item1": None }, "subfolder2": { "item3": None } } } } 
pretty_dict(d)
Python 相关文章推荐
Python用zip函数同时遍历多个迭代器示例详解
Nov 14 Python
Python进阶篇之字典操作总结
Nov 16 Python
Python学习入门之区块链详解
Jul 25 Python
Python使用min、max函数查找二维数据矩阵中最小、最大值的方法
May 15 Python
浅谈python连续赋值可能引发的错误
Nov 10 Python
使用pandas实现csv/excel sheet互相转换的方法
Dec 10 Python
python 设置输出图像的像素大小方法
Jul 04 Python
python urllib爬虫模块使用解析
Sep 05 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
Sep 17 Python
用pytorch的nn.Module构造简单全链接层实例
Jan 14 Python
Python爬取YY评级分数并保存数据实现过程解析
Jun 01 Python
python实现时间序列自相关图(acf)、偏自相关图(pacf)教程
Jun 03 Python
浅谈Python中chr、unichr、ord字符函数之间的对比
Jun 16 #Python
详解Python中 __get__和__getattr__和__getattribute__的区别
Jun 16 #Python
Python利用带权重随机数解决抽奖和游戏爆装备问题
Jun 16 #Python
Python黑魔法@property装饰器的使用技巧解析
Jun 16 #Python
Python实现类似jQuery使用中的链式调用的示例
Jun 16 #Python
浅析Python中else语句块的使用技巧
Jun 16 #Python
python基础教程之分支、循环简单用法
Jun 16 #Python
You might like
PHP iconv 函数转gb2312的bug解决方法
2009/10/11 PHP
PHP中文件读、写、删的操作(PHP中对文件和目录操作)
2012/03/06 PHP
PHP 伪静态技术原理以及突破原理实现介绍
2013/07/12 PHP
php小技巧之过滤ascii控制字符
2014/05/14 PHP
Prototype使用指南之dom.js
2007/01/10 Javascript
JavaScript 事件查询综合
2009/07/13 Javascript
javascript温习的一些笔记 基础常用知识小结
2011/06/22 Javascript
css结合js制作下拉菜单示例代码
2014/02/27 Javascript
js中style.display=""无效的解决方法
2014/10/30 Javascript
老生常谈onBlur事件与onfocus事件(js)
2016/07/09 Javascript
VC调用javascript的几种方法(推荐)
2016/08/09 Javascript
js异步编程小技巧详解
2017/08/14 Javascript
Vue2.0权限树组件实现代码
2017/08/29 Javascript
es6中的解构赋值、扩展运算符和rest参数使用详解
2017/09/28 Javascript
AngularJS实现的获取焦点及失去焦点时的表单验证功能示例
2017/10/25 Javascript
JavaScript的setter与getter方法
2017/11/29 Javascript
js字符串倒序的实例代码
2018/11/30 Javascript
Vue  webpack 项目自动打包压缩成zip文件的方法
2019/07/24 Javascript
Jquery属性的获取/设置及样式添加/删除操作技巧分析
2019/12/23 jQuery
原生js实现轮播图特效
2020/05/04 Javascript
[46:23]OG vs EG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
python通过scapy获取局域网所有主机mac地址示例
2014/05/04 Python
Python3.4编程实现简单抓取爬虫功能示例
2017/09/14 Python
Python中修改字符串的四种方法
2018/11/02 Python
在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法
2019/06/18 Python
Timberland法国官网:购买靴子、鞋子、衣服、夹克和配饰
2019/11/30 全球购物
沃尔玛加拿大:Walmart.ca
2020/03/02 全球购物
Java面试题汇总
2015/12/06 面试题
英语专业应届生求职信范文
2013/11/15 职场文书
党的群众路线教育实践活动学习心得体会
2014/03/03 职场文书
四群教育工作实施方案
2014/03/26 职场文书
2014年环保工作总结
2014/11/26 职场文书
专业技术人员年度考核评语
2014/12/31 职场文书
2019最新公司租房合同(例文)
2019/07/18 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers
Ajax实现三级联动效果
2021/10/05 Javascript