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脚本使得web页面上的代码高亮显示
Apr 24 Python
放弃 Python 转向 Go语言有人给出了 9 大理由
Oct 20 Python
Python get获取页面cookie代码实例
Sep 12 Python
Python一行代码实现快速排序的方法
Apr 30 Python
pyqt 多窗口之间的相互调用方法
Jun 19 Python
python 获取sqlite3数据库的表名和表字段名的实例
Jul 17 Python
使用python去除图片白色像素的实例
Dec 12 Python
python scrapy重复执行实现代码详解
Dec 28 Python
python实现横向拼接图片
Mar 23 Python
Python实现壁纸下载与轮换
Oct 19 Python
python网络爬虫实现发送短信验证码的方法
Feb 25 Python
python Polars库的使用简介
Apr 21 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中自定义错误页面和提示页面实例
2014/11/22 PHP
PHP封装的简单连接MongoDB类示例
2019/02/13 PHP
Js 刷新框架页的代码
2010/04/13 Javascript
有关js的变量作用域和this指针的讨论
2010/12/16 Javascript
JQuery选择器特辑 详细小结
2012/05/14 Javascript
简单常用的幻灯片播放实现代码
2013/09/25 Javascript
Jquery动态替换div内容及动态展示的方法
2015/01/23 Javascript
浅谈EasyUI中Treegrid节点的删除
2015/03/01 Javascript
JavaScript实现找质数代码分享
2015/03/24 Javascript
js获取字符串字节数方法小结
2015/06/09 Javascript
jQuery原型属性和原型方法详解
2015/07/07 Javascript
js检测用户输入密码强度
2015/10/22 Javascript
jQuery EasyUI 布局之动态添加tabs标签页
2015/11/18 Javascript
JQuery异步加载PartialView的方法
2016/06/07 Javascript
详谈JS中实现种子随机数及作用
2016/07/19 Javascript
node.js版本管理工具n无效的原理和解决方法
2016/11/24 Javascript
JS实现图片上传多次上传同一张不生效的处理方法
2018/08/06 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
2019/04/11 Javascript
JavaScript学习教程之cookie与webstorage
2019/06/23 Javascript
vue之组件内监控$store中定义变量的变化详解
2019/11/08 Javascript
[04:42]5分钟带你了解什么是DOTA2(第一期)
2017/02/07 DOTA
简单的Python抓taobao图片爬虫
2014/10/26 Python
Python基本语法经典教程
2016/03/11 Python
Python 3.x读写csv文件中数字的方法示例
2017/08/29 Python
python放大图片和画方格实现算法
2018/03/30 Python
python生成1行四列全2矩阵的方法
2018/08/04 Python
如何使用python socket模块实现简单的文件下载
2020/09/04 Python
在网上学习全世界最好的课程:Coursera
2017/11/07 全球购物
美国轮胎网站:Priority Tire
2018/11/28 全球购物
美国电子产品主要品牌的授权在线零售商:DataVision
2019/03/23 全球购物
街头时尚在线:JESSICABUURMAN
2019/06/16 全球购物
实习自荐信
2013/10/13 职场文书
企业文化宣传标语
2014/06/09 职场文书
信仰观后感
2015/06/03 职场文书
浅析Python中的套接字编程
2021/06/22 Python
业余无线电通联Q语
2022/02/18 无线电