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 and、or以及and-or语法总结
Apr 14 Python
Python利用正则表达式匹配并截取指定子串及去重的方法
Jul 30 Python
Python模拟百度登录实例详解
Jan 20 Python
python对配置文件.ini进行增删改查操作的方法示例
Jul 28 Python
pycharm使用matplotlib.pyplot不显示图形的解决方法
Oct 28 Python
python贪吃蛇游戏代码
Apr 18 Python
pyqt5 删除layout中的所有widget方法
Jun 25 Python
基于python框架Scrapy爬取自己的博客内容过程详解
Aug 05 Python
python ImageDraw类实现几何图形的绘制与文字的绘制
Feb 26 Python
Python while true实现爬虫定时任务
Jun 08 Python
浅谈Python 钉钉报警必备知识系统讲解
Aug 17 Python
Jupyter Notebook添加代码自动补全功能的实现
Jan 07 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 flock 文件锁详细介绍
2012/12/29 PHP
详解php用static方法的原因
2018/09/12 PHP
Laravel框架实现多数据库连接操作详解
2019/07/12 PHP
javascript mouseover、mouseout停止事件冒泡的解决方案
2009/04/07 Javascript
侧栏跟随滚动的简单实现代码
2013/03/18 Javascript
Jquery时间验证和转换工具小例子
2013/07/01 Javascript
jquery animate实现鼠标放上去显示离开隐藏效果
2013/07/21 Javascript
javaScript array(数组)使用字符串作为数组下标的方法
2013/11/19 Javascript
jqeury-easyui-layout问题解决方法
2014/03/24 Javascript
Node.js的包详细介绍
2015/01/14 Javascript
javascript实现按回车键切换焦点
2015/02/09 Javascript
jQuery遍历页面所有CheckBox查看是否被选中的方法
2015/04/14 Javascript
AspNet中使用JQuery上传插件Uploadify详解
2015/05/20 Javascript
JavaScript节点及列表操作实例小结
2015/08/05 Javascript
jquery实现加载进度条提示效果
2015/11/23 Javascript
JavaScript实现带播放列表的音乐播放器实例分享
2016/03/07 Javascript
JavaScript中校验银行卡号的实现代码
2016/12/19 Javascript
JavaScript通过filereader接口读取文件
2017/05/10 Javascript
node+koa实现数据mock接口的方法
2017/09/20 Javascript
关于react中组件通信的几种方式详解
2017/12/10 Javascript
使用异步组件优化Vue应用程序的性能
2019/04/28 Javascript
一次微信小程序内地图的使用实战记录
2019/09/09 Javascript
简述Vue中容易被忽视的知识点
2019/12/09 Javascript
OpenLayers3实现地图显示功能
2020/09/25 Javascript
django+echart绘制曲线图的方法示例
2018/11/26 Python
python 对多个csv文件分别进行处理的方法
2019/01/07 Python
python被修饰的函数消失问题解决(基于wraps函数)
2019/11/04 Python
QML实现钟表效果
2020/06/02 Python
Python基础教程(一)——Windows搭建开发Python开发环境
2020/07/20 Python
简单html5代码获取地理位置
2014/03/31 HTML / CSS
德国隐形眼镜店:LuckyLens
2018/07/29 全球购物
工作总结与自我评价
2014/09/18 职场文书
酒店财务经理岗位职责
2015/04/08 职场文书
Mysql - 常用函数 每天积极向上
2021/04/05 MySQL
html+css实现分层金字塔的实例
2021/06/02 HTML / CSS
Python 视频画质增强
2022/04/28 Python