Python构造自定义方法来美化字典结构输出的示例,python字典
Python构造自定义方法来美化字典结构输出的示例,python字典
示例:
复制代码 代码如下:
d = { "root": { "folder2": { "item2": None, "item1": None }, "folder1": { "subfolder1": { "item2": None, "item1": None }, "subfolder2": { "item3": None } } } }
美观输出是:
观察一下特点:
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中的多行注释文档编写风格汇总,
- 最大K个数问题的Python版解法总结,python解法
- 实例讲解Python中global语句下全局变量的值的修改,pyt
- 从局部变量和全局变量开始全面解析Python中变量的作用
- python运行时间的几种方法,python运行几种方法
- 浅谈python为什么不需要三目运算符和switch,浅谈python
- 举例讲解Python面向对象编程中类的继承,python面向对象
- Python中使用装饰器来优化尾递归的示例,python递归
- 浅析AST抽象语法树及Python代码实现,astpython
- python下调用pytesseract识别某网站验证码的实现方法,p
评论关闭