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之Python安装
Sep 12 Python
python使用datetime模块计算各种时间间隔的方法
Mar 24 Python
python排序方法实例分析
Apr 30 Python
Apache如何部署django项目
May 21 Python
Python 和 JS 有哪些相同之处
Nov 23 Python
Python实现的视频播放器功能完整示例
Feb 01 Python
Python 实现异步调用函数的示例讲解
Oct 14 Python
解决Python中list里的中文输出到html模板里的问题
Dec 17 Python
Python使用sqlalchemy模块连接数据库操作示例
Mar 13 Python
在PYQT5中QscrollArea(滚动条)的使用方法
Jun 14 Python
详解Python time库的使用
Oct 10 Python
tensorflow中tf.slice和tf.gather切片函数的使用
Jan 19 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
让你同时上传 1000 个文件 (二)
2006/10/09 PHP
用PHP将数据导入到Foxmail的实现代码
2010/09/05 PHP
PHP实现的随机IP函数【国内IP段】
2016/07/20 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
javascript中对Attr(dom中属性)的操作示例讲解
2013/12/02 Javascript
js文件包含的几种方式介绍
2014/09/28 Javascript
Javascript调用函数方法的几种方式介绍
2015/03/20 Javascript
jQuery常见面试题之DOM操作详析
2017/07/05 jQuery
微信小程序之页面跳转和参数传递的实现
2017/09/29 Javascript
javascript 通过键名获取键盘的keyCode方法
2017/12/31 Javascript
NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法
2018/10/17 NodeJs
在element-ui的select下拉框加上滚动加载
2019/04/18 Javascript
小程序云函数调用API接口的方法
2019/05/17 Javascript
详解Vue之计算属性
2020/06/20 Javascript
[44:39]2014 DOTA2国际邀请赛中国区预选赛 NE VS CNB
2014/05/21 DOTA
python 域名分析工具实现代码
2009/07/15 Python
python实现判断数组是否包含指定元素的方法
2015/07/15 Python
python Pandas 读取txt表格的实例
2018/04/29 Python
pyinstaller打包多个py文件和去除cmd黑框的方法
2019/06/21 Python
用python做游戏的细节详解
2019/06/25 Python
总结Pyinstaller的坑及终极解决方法(小结)
2020/09/21 Python
python中的对数log函数表示及用法
2020/12/09 Python
基于css3的属性transition制作菜单导航效果
2015/09/01 HTML / CSS
解决canvas转base64/jpeg时透明区域变成黑色背景的方法
2016/10/23 HTML / CSS
美国杰西潘尼官网:JCPenney
2019/06/12 全球购物
《沉香救母》教学反思
2014/04/19 职场文书
学雷锋活动总结范文
2014/04/25 职场文书
人民调解员先进事迹材料
2014/05/08 职场文书
合作意向书
2014/07/30 职场文书
纪检干部对照检查材料
2014/08/22 职场文书
交通事故一次性赔偿协议书范本
2014/11/02 职场文书
大学生在校表现评语
2014/12/31 职场文书
2016年春节慰问信息
2015/03/25 职场文书
人力资源部工作计划
2019/05/14 职场文书
Java 获取Word中所有的插入和删除修订的方法
2022/04/06 Java/Android
win11电脑关机鼠标灯还亮怎么解决? win11关机后鼠标灯还亮解决方法
2023/01/09 数码科技