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求两个list的差集、交集与并集的方法
Nov 01 Python
python中os操作文件及文件路径实例汇总
Jan 15 Python
Python3使用pandas模块读写excel操作示例
Jul 03 Python
Python利用神经网络解决非线性回归问题实例详解
Jul 19 Python
Python 批量刷博客园访问量脚本过程解析
Aug 30 Python
Python爬虫 urllib2的使用方法详解
Sep 23 Python
Flask框架 CSRF 保护实现方法详解
Oct 30 Python
利用Python的sympy包求解一元三次方程示例
Nov 22 Python
详解Django配置JWT认证方式
May 09 Python
Python xlwt模块使用代码实例
Jun 10 Python
python开发一款翻译工具
Oct 10 Python
python数据处理之Pandas类型转换
Apr 28 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 网页播放器用来播放在线视频的代码(自动判断并选择视频文件类型)
2010/06/03 PHP
用来解析.htpasswd文件的PHP类
2012/09/05 PHP
yii2带搜索功能的下拉框实例详解
2016/05/12 PHP
php中strlen和mb_strlen用法实例分析
2016/11/12 PHP
40款非常棒的jQuery 插件和制作教程(系列一)
2011/10/26 Javascript
Raphael一个用于在网页中绘制矢量图形的Javascript库
2013/01/08 Javascript
用jquery统计子菜单的条数示例代码
2013/10/18 Javascript
JS高级调试技巧:捕获和分析 JavaScript Error详解
2014/03/16 Javascript
jquery 操作css样式、位置、尺寸方法汇总
2014/11/28 Javascript
jquery中checkbox全选失效的解决方法
2014/12/26 Javascript
js使用onmousemove和onmouseout获取鼠标坐标的方法
2015/03/31 Javascript
JS+CSS实现鼠标滑过时动态翻滚的导航条效果
2015/09/24 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
2016/02/19 Javascript
Node.js 应用跑得更快 10 个技巧
2016/04/03 Javascript
JavaScript 闭包机制详解及实例代码
2016/10/10 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
2017/08/25 Javascript
vue+socket.io+express+mongodb 实现简易多房间在线群聊示例
2017/10/21 Javascript
webpack本地开发环境无法用IP访问的解决方法
2018/03/20 Javascript
vue中使用props传值的方法
2019/05/08 Javascript
微信打开网址添加在浏览器中打开提示的办法
2019/05/20 Javascript
通过GASP让vue实现动态效果实例代码详解
2019/11/24 Javascript
[01:07:57]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第二场 1月19日
2021/03/11 DOTA
学习python (1)
2006/10/31 Python
Python实现列表转换成字典数据结构的方法
2016/03/11 Python
python图书管理系统
2020/04/05 Python
如何在Django配置文件里配置session链接
2019/08/06 Python
Python unittest基本使用方法代码实例
2020/06/29 Python
python map比for循环快在哪
2020/09/21 Python
html5+svg学习指南之SVG基础知识
2014/12/17 HTML / CSS
纽约和芝加哥当天送花:Ode à la Rose
2019/07/05 全球购物
情人节活动策划方案
2014/02/27 职场文书
工作收入证明模板
2015/06/12 职场文书
如何用Navicat操作MySQL
2021/05/12 MySQL
Pytorch DataLoader shuffle验证方式
2021/06/02 Python
Java实现简易的分词器功能
2021/06/15 Java/Android
详解NumPy中的线性关系与数据修剪压缩
2022/05/25 Python