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不规范的日期字符串处理类
Jun 10 Python
跟老齐学Python之字典,你还记得吗?
Sep 20 Python
python 爬虫出现403禁止访问错误详解
Mar 11 Python
Python pymongo模块用法示例
Mar 31 Python
Python制作动态字符图的实例
Jan 27 Python
Python爬虫beautifulsoup4常用的解析方法总结
Feb 25 Python
Python转换时间的图文方法
Jul 01 Python
Python 实现 T00ls 自动签到脚本代码(邮件+钉钉通知)
Jul 06 Python
Python生成并下载文件后端代码实例
Aug 31 Python
如何使用 Python 读取文件和照片的创建日期
Sep 05 Python
一篇文章弄懂Python关键字、标识符和变量
Jul 15 Python
使用Python开发冰球小游戏
Apr 30 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
《一拳超人》埼玉一拳下去,他们存在了800年毫无意义!
2020/03/02 日漫
深入PHP购物车模块功能分析(函数讲解,附源码)
2013/06/25 PHP
再谈javascript 动态添加样式规则 W3C校检
2009/12/25 Javascript
jqeury eval将字符串转换json的方法
2011/01/20 Javascript
自己动手制作jquery插件之自动添加删除行的实现
2011/10/13 Javascript
浅析jQuery EasyUI中的tree使用指南
2014/12/18 Javascript
javascript实现汉字转拼音代码分享
2015/04/20 Javascript
基于jQuery通过jQuery.form.js插件使用ajax提交form表单
2015/08/17 Javascript
jQuery实现平滑滚动的标签分栏切换效果
2015/08/28 Javascript
jQuery如何解决IE输入框不能输入的问题
2016/10/08 Javascript
Bootstrap php制作动态分页标签
2016/12/23 Javascript
javascript设计模式之Adapter模式【适配器模式】实现方法示例
2017/01/13 Javascript
如何将你的AngularJS1.x应用迁移至React的方法
2018/02/01 Javascript
Koa项目搭建过程详细记录
2018/04/12 Javascript
详解Node.js 中使用 ECDSA 签名遇到的坑
2018/11/26 Javascript
js设置鼠标悬停改变背景色实现详解
2019/06/26 Javascript
微信小程序左右滚动公告栏效果代码实例
2019/09/16 Javascript
vue与iframe之间的信息交互的实现
2020/04/08 Javascript
使用wxpython实现的一个简单图片浏览器实例
2014/07/10 Python
python3实现短网址和数字相互转换的方法
2015/04/28 Python
python实现指定字符串补全空格的方法
2015/04/30 Python
Django中实现点击图片链接强制直接下载的方法
2015/05/14 Python
django中的setting最佳配置小结
2017/11/21 Python
python使用PIL给图片添加文字生成海报示例
2018/08/17 Python
使用python实现语音文件的特征提取方法
2019/01/09 Python
CSS3实现红包抖动效果
2020/12/23 HTML / CSS
Space NK英国站:英国热门美妆网站
2017/12/11 全球购物
抽象方法、抽象类怎样声明
2014/10/25 面试题
C语言编程题
2015/03/09 面试题
应届生污水处理求职信
2013/11/06 职场文书
工商企业管理实习自我鉴定
2013/12/04 职场文书
难忘的一天教学反思
2014/04/30 职场文书
小学数学课题方案
2014/06/15 职场文书
化工厂员工工作总结
2015/10/15 职场文书
领导干部学习三严三实心得体会
2016/01/05 职场文书
实战Python爬虫爬取酷我音乐
2022/04/11 Python