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设置windows桌面壁纸的实现代码
Jan 28 Python
python正则表达式修复网站文章字体不统一的解决方法
Feb 21 Python
Python去除、替换字符串空格的处理方法
Apr 01 Python
Python爬取商家联系电话以及各种数据的方法
Nov 10 Python
python生成n个元素的全组合方法
Nov 13 Python
python中import与from方法总结(推荐)
Mar 21 Python
Python minidom模块用法示例【DOM写入和解析XML】
Mar 25 Python
Python单元测试与测试用例简析
Nov 09 Python
python修改linux中文件(文件夹)的权限属性操作
Mar 05 Python
django实现后台显示媒体文件
Apr 07 Python
如何实现在jupyter notebook中播放视频(不停地展示图片)
Apr 23 Python
Django xadmin安装及使用详解
Oct 26 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
ThinkPHP CURD方法之page方法详解
2014/06/18 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
PHP使用new StdClass()创建空对象的方法分析
2017/06/06 PHP
php实现的PDO异常处理操作分析
2018/12/27 PHP
php的RSA加密解密算法原理与用法分析
2020/01/23 PHP
PHP与Web页面的交互示例详解二
2020/08/04 PHP
纯JavaScript实现的完美渐变弹出层效果代码
2010/04/02 Javascript
jQuery学习笔记之jQuery选择器的使用
2010/12/22 Javascript
jquery一般方法介绍 入门参考
2011/06/21 Javascript
js当一个变量为函数时 应该注意的一点细节小结
2011/12/29 Javascript
单击按钮显示隐藏子菜单经典案例
2013/01/04 Javascript
JavaScript:Div层拖动效果实例代码
2013/08/06 Javascript
jQuery模拟点击A标记示例参考
2014/04/17 Javascript
2014最热门的JavaScript代码高亮插件推荐
2014/11/25 Javascript
js实现下拉菜单效果
2017/03/01 Javascript
javascript  数组排序与对象排序的实例
2017/07/17 Javascript
使用Vue.observable()进行状态管理的实例代码详解
2019/05/26 Javascript
Vue.js路由实现选项卡简单实例
2019/07/24 Javascript
微信小程序导入Vant报错VM292:1 thirdScriptError的解决方法
2019/08/01 Javascript
JS实现网页时钟特效
2020/03/25 Javascript
浅谈Python 对象内存占用
2016/07/15 Python
Python中XlsxWriter模块简介与用法分析
2018/04/24 Python
Python装饰器基础概念与用法详解
2018/12/22 Python
pytorch 实现tensor与numpy数组转换
2019/12/27 Python
Jupyter notebook无法导入第三方模块的解决方式
2020/04/15 Python
Python模拟登入的N种方式(建议收藏)
2020/05/31 Python
DAWGS鞋官方网站:鞋,凉鞋,靴子
2016/10/04 全球购物
竟聘演讲稿范文
2013/12/31 职场文书
大学生学年自我鉴定
2014/02/10 职场文书
革命先烈的英雄事迹材料
2014/02/15 职场文书
模具专业毕业生自荐书范文
2014/02/19 职场文书
党员志愿者服务倡议书
2015/04/29 职场文书
2020年个人安全保证书参考模板
2020/01/08 职场文书
Nginx进程调度问题详解
2021/09/25 Servers
如何利用Python实现n*n螺旋矩阵
2022/01/18 Python
利用Python实现模拟登录知乎
2022/05/25 Python