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+树莓派+YOLO打造一款人工智能照相机
Jan 02 Python
Python+PIL实现支付宝AR红包
Feb 09 Python
python3实现公众号每日定时发送日报和图片
Feb 24 Python
详谈python在windows中的文件路径问题
Apr 28 Python
python实战教程之自动扫雷
Jul 13 Python
python程序封装为win32服务的方法
Mar 07 Python
详解python中list的使用
Mar 15 Python
python画图——实现在图上标注上具体数值的方法
Jul 08 Python
kali中python版本的切换方法
Jul 11 Python
python 下载文件的多种方法汇总
Nov 17 Python
Python实现Word文档转换Markdown的示例
Dec 22 Python
Python函数中的不定长参数相关知识总结
Jun 24 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
dedecms模版制作使用方法
2007/04/03 PHP
php数组函数序列之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值
2011/10/31 PHP
PHP $_FILES中error返回值详解
2014/01/30 PHP
Javascript 面向对象 继承
2010/05/13 Javascript
让JavaScript拥有类似Lambda表达式编程能力的方法
2010/09/12 Javascript
尝试在让script的type属性等于text/html
2013/01/15 Javascript
jQuery插件的写法分享
2013/06/12 Javascript
方便实用的jQuery checkbox复选框全选功能简单实例
2013/10/09 Javascript
JS数组合并push与concat区别分析
2015/12/17 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
2016/05/18 Javascript
微信小程序页面开发注意事项整理
2017/05/18 Javascript
利用canvas中toDataURL()将图片转为dataURL(base64)的方法详解
2017/11/20 Javascript
vue.js实现标签页切换效果
2018/06/07 Javascript
详解Require.js与Sea.js的区别
2018/08/05 Javascript
angular2 ng2-file-upload上传示例代码
2018/08/23 Javascript
express异步函数异常捕获示例详解
2020/11/30 Javascript
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
2020/12/25 Vue.js
Python中文编码那些事
2014/06/25 Python
python中函数总结之装饰器闭包详解
2016/06/12 Python
Python的Tornado框架的异步任务与AsyncHTTPClient
2016/06/27 Python
50行Python代码实现人脸检测功能
2018/01/23 Python
python 切换root 执行命令的方法
2019/01/19 Python
Python mutiprocessing多线程池pool操作示例
2019/01/30 Python
vscode调试django项目的方法
2020/08/06 Python
CSS3 flex布局之快速实现BorderLayout布局
2015/12/03 HTML / CSS
5 个强大的HTML5 API 函数推荐
2014/11/19 HTML / CSS
Born鞋子官网:Born Shoes
2017/04/06 全球购物
外贸公司实习自我鉴定
2013/09/24 职场文书
模具设计与制造专业推荐信
2014/02/16 职场文书
国窖1573广告词
2014/03/21 职场文书
电气自动化求职信
2014/06/24 职场文书
群众路线教育实践活动剖析材料
2014/09/30 职场文书
医生辞职信范文
2015/03/02 职场文书
简历自我评价模板
2015/03/11 职场文书
2015年图书馆个人工作总结
2015/05/26 职场文书
win11无线投屏在哪设置? win11无线投屏功能的使用方法
2022/04/08 数码科技