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读取Excel的方法实例分析
Jul 11 Python
Python的SimpleHTTPServer模块用处及使用方法简介
Jan 22 Python
Python逐行读取文件中内容的简单方法
Feb 26 Python
Python 函数绘图及函数图像微分与积分
Nov 20 Python
python FTP批量下载/删除/上传实例
Dec 22 Python
Python实现CNN的多通道输入实例
Jan 17 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
Apr 16 Python
容易被忽略的Python内置类型
Sep 03 Python
Python生成pdf目录书签的实例方法
Oct 29 Python
python爬取抖音视频的实例分析
Jan 19 Python
用Python监控你的朋友都在浏览哪些网站?
May 27 Python
Python代码实现双链表
May 25 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中的HashTable结构详解
2013/06/13 PHP
一个显示效果非常不错的PHP错误、异常处理类
2014/03/21 PHP
PHP包含文件函数include、include_once、require、require_once区别总结
2014/04/05 PHP
浅析PHP中strlen和mb_strlen的区别
2014/08/31 PHP
PHP实现数组根据某个单元字段排序操作示例
2018/08/01 PHP
JavaScript的单例模式 (singleton in Javascript)
2010/06/11 Javascript
基于jQuery的投票系统显示结果插件
2011/08/12 Javascript
js面向对象设计用{}好还是function(){}好(构造函数)
2011/10/23 Javascript
jquery获取被勾选的checked(选中)的那一行的3列和4列的值
2013/07/04 Javascript
详谈JavaScript内存泄漏
2014/11/14 Javascript
angularJS中$apply()方法详解
2015/01/07 Javascript
js阻止默认浏览器行为与冒泡行为的实现代码
2016/05/15 Javascript
实例讲解jQuery中对事件的命名空间的运用
2016/05/24 Javascript
获取JavaScript异步函数的返回值
2016/12/21 Javascript
ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
2017/05/24 Javascript
浅谈angular4生命周期钩子
2017/09/05 Javascript
JavaScript实现的斑马线表格效果【隔行变色】
2017/09/18 Javascript
什么是Vue.js框架 为什么选择它?
2017/10/17 Javascript
jQuery实现文件编码成base64并通过AJAX上传的方法
2018/04/12 jQuery
用webpack4开发小程序的实现方法
2019/06/04 Javascript
Element 默认勾选表格 toggleRowSelection的实现
2019/09/04 Javascript
JavaScript如何判断对象有某属性
2020/07/03 Javascript
Centos Python2 升级到Python3的简单实现
2016/06/21 Python
微信跳一跳python辅助脚本(总结)
2018/01/11 Python
pandas获取groupby分组里最大值所在的行方法
2018/04/20 Python
python读csv文件时指定行为表头或无表头的方法
2019/06/26 Python
python绘制规则网络图形实例
2019/12/09 Python
Python生成个性签名图片获取GUI过程解析
2019/12/16 Python
python正则表达式匹配IP代码实例
2019/12/28 Python
使用html5制作loading图的示例
2014/04/14 HTML / CSS
HTML5 canvas标签实现刮刮卡效果
2015/04/24 HTML / CSS
后勤岗位职责
2013/11/26 职场文书
汽车运用工程专业毕业生推荐信
2013/12/25 职场文书
我的生日感言
2015/08/03 职场文书
Redis6.0搭建集群Redis-cluster的方法
2021/05/08 Redis
《仙剑客栈2》第一弹正式宣传片公开 年内发售
2022/04/07 其他游戏