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实现向QQ群成员自动发邮件的方法
Nov 19 Python
python执行get提交的方法
Apr 29 Python
教大家使用Python SqlAlchemy
Feb 12 Python
神经网络理论基础及Python实现详解
Dec 15 Python
Python构建网页爬虫原理分析
Dec 19 Python
django表单的Widgets使用详解
Jul 22 Python
python3.8下载及安装步骤详解
Jan 15 Python
python3 sorted 如何实现自定义排序标准
Mar 12 Python
django实现模板中的字符串文字和自动转义
Mar 31 Python
Python正则表达式如何匹配中文
May 27 Python
Python调用.net动态库实现过程解析
Jun 05 Python
使用Python爬取Json数据的示例代码
Dec 07 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
十大催泪虐心动漫电影,有几部你还没看
2020/03/04 日漫
php中magic_quotes_gpc对unserialize的影响分析
2014/12/16 PHP
PHP仿tp实现mvc框架基本设计思路与实现方法分析
2018/05/23 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
2019/07/24 PHP
PHP数据源架构模式之表入口模式实例分析
2020/01/23 PHP
jQuery使用手册之三 CSS操作
2007/03/24 Javascript
网页防止tab键的使用快速解决方法
2013/11/07 Javascript
javascript贪吃蛇完整版(源码)
2013/12/09 Javascript
设置jsf的选择框h:selectOneMenu为不可编辑状态的方法
2014/01/07 Javascript
使用JavaScript+canvas实现图片裁剪
2015/01/30 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
asp知识整理笔记3(问答模式)
2015/09/27 Javascript
jQuery弹出层后禁用底部滚动条(移动端关闭回到原位置)
2016/08/29 Javascript
AngularJs directive详解及示例代码
2016/09/01 Javascript
Bootstrap CSS组件之大屏幕展播
2016/12/17 Javascript
nodejs批量下载图片的实现方法
2017/05/19 NodeJs
基于JavaScript实现弹幕特效
2020/08/27 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
微信小程序实现下载进度条的方法
2017/12/08 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
Vue3.0的优化总结
2020/10/16 Javascript
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
2021/02/23 Vue.js
[04:03]2014DOTA2西雅图国际邀请赛 LGD战队巡礼
2014/07/07 DOTA
[49:08]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
在RedHat系Linux上部署Python的Celery框架的教程
2015/04/07 Python
Python基于Socket实现的简单聊天程序示例
2017/08/05 Python
python 模拟贷款卡号生成规则过程解析
2019/08/30 Python
Python range、enumerate和zip函数用法详解
2019/09/11 Python
Python+pyftpdlib实现局域网文件互传
2020/08/24 Python
pycharm 快速解决python代码冲突的问题
2021/01/15 Python
css3学习心得分享
2013/08/19 HTML / CSS
争论的故事教学反思
2014/02/06 职场文书
社团2014年植树节活动总结
2014/03/11 职场文书
煤矿安全学习心得体会
2016/01/18 职场文书
JavaScript中document.activeELement焦点元素介绍
2021/11/27 Javascript
了解Kubernetes中的Service和Endpoint
2022/04/01 Servers