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实用日期时间处理方法汇总
May 09 Python
Java中重定向输出流实现用文件记录程序日志
Jun 12 Python
Python中字符串的处理技巧分享
Sep 17 Python
Python登录并获取CSDN博客所有文章列表代码实例
Dec 28 Python
详解Python中的四种队列
May 21 Python
Django渲染Markdown文章目录的方法示例
Jan 02 Python
python面试题小结附答案实例代码
Apr 11 Python
对Python 检查文件名是否规范的实例详解
Jun 10 Python
python之mock模块基本使用方法详解
Jun 27 Python
详解Python list和numpy array的存储和读取方法
Nov 06 Python
Python实现使用dir获取类的方法列表
Dec 24 Python
Python爬虫开发与项目实战
Dec 16 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做的端口嗅探器--可以指定网站和端口
2006/10/09 PHP
JoshChen_web格式编码UTF8-无BOM的小细节分析
2013/08/16 PHP
php和jquery实现地图区域数据统计展示数据示例
2014/02/12 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
2014/11/18 PHP
php在线解压ZIP文件的方法
2014/12/30 PHP
PHP+AJAX实现投票功能的方法
2015/09/28 PHP
php表单习惯用的正则表达式
2017/10/11 PHP
[原创]静态页面也可以实现预览 列表不同的显示方式
2006/10/14 Javascript
用ADODB.Stream转换
2007/01/22 Javascript
用户注册常用javascript代码
2009/08/29 Javascript
Jquery 的扩展方法总结
2011/10/01 Javascript
单击按钮显示隐藏子菜单经典案例
2013/01/04 Javascript
模拟jQuery中的ready方法及实现按需加载css,js实例代码
2013/09/27 Javascript
Jquery焦点与失去焦点示例应用
2014/06/10 Javascript
JavaScript资源预加载组件和滑屏组件的使用推荐
2016/03/10 Javascript
jQuery实现的无限级下拉菜单功能示例
2016/09/12 Javascript
React快速入门教程
2017/01/17 Javascript
AutoJs实现刷宝短视频的思路详解
2020/05/22 Javascript
记一次vue跨域的解决
2020/10/21 Javascript
vue-drawer-layout实现手势滑出菜单栏
2020/11/19 Vue.js
Python 统计字数的思路详解
2018/05/08 Python
Centos下实现安装Python3.6和Python2共存
2018/08/15 Python
Django中reverse反转并且传递参数的方法
2019/08/06 Python
美国第二大团购网站:LivingSocial
2016/07/24 全球购物
英国Amara家居法国网站:家居装饰,现代装饰和豪华礼品
2016/12/15 全球购物
通用C#笔试题附答案
2016/11/26 面试题
产品质量承诺范本
2014/03/31 职场文书
大队委竞选演讲稿
2014/04/28 职场文书
安全标语大全
2014/06/10 职场文书
幼儿园安全责任书范本
2014/07/24 职场文书
银行授权委托书范本
2014/10/04 职场文书
预备党员群众路线思想汇报2014
2014/10/25 职场文书
2016年五一国际劳动节活动总结
2016/04/06 职场文书
详解Python描述符的工作原理
2021/06/11 Python
电脑只能进入安全模式无法正常启动的解决办法
2022/04/08 数码科技
如何解决flex文本溢出问题小结
2022/07/15 HTML / CSS