演示样例:

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 - 实现一个pretty函数美丽的输出嵌套字典的更多相关文章

  1. 飘逸的python - 解决一个有限制的组合需求

    假设有一个团队技能的需求. 这类技能是要集齐所有指定的人就能激活. 但是因为同一个人又2种身份存在,比如杨戬/神杨戬,于是便产生了组合. 这种组合跟普通组合不一样,普通组合可以随意组合.而这种组合是每 ...

  2. 飘逸的python - 实现一个极简的优先队列

    一个队列至少满足2个方法,put和get. 借助最小堆来实现. 这里按"值越大优先级越高"的顺序. #coding=utf-8 from heapq import heappush ...

  3. Python实现一个键对应多个值的字典(multidict)

    一个字典就是一个键对应一个单值的映射.如果你想要一个键映射多个值,那么你就需要将这多个值放到另外的容器中, 比如列表或者集合里面.比如,你可以像下面这样构造这样的字典: d = { 'a' : [1, ...

  4. python中addict模块,设置和读取嵌套字典

    源码地址:   https://github.com/mewwts/addict/blob/master/README.md

  5. 『Python基础-13』函数 Function

    这篇笔记记录的知识点: 函数的基本概念 自定义函数 函数的几种参数 编程的三种方式: 1.OOP 面向对象编程,万物皆对象,以class为主,抽象化 2.POP 面向过程编程,万事皆过程,def定义过 ...

  6. Python初学者第十八天 函数(2)

    18day 函数 1.函数的返回值:return a.函数外的代码想要获取函数的返回结果时,即可使用return语句 b.函数中如遇到return后,会停止执行,并返回结果.所以若函数未使用retur ...

  7. 用Python写了一个postgresql函数,感觉很爽

    用Python写了一个postgresql函数,感觉很爽 CREATE LANGUAGE plpythonu; postgresql函数 CREATE OR REPLACE FUNCTION myfu ...

  8. Python定义一个函数

    Python函数:实现某种功能的代码段 定义一个函数需要遵循的规则: 1.使用 def 关键字 函数名和( ),括号内可以有形参 匿名函数使用 lambda 关键字定义 2.任何传入参数和自变量必须放 ...

  9. python函数的实例,书写一个创建有针对性的专用密码字典的程序

    python学习,实战学习,函数的学习与使用,综合知识的运用.包括for ,while循环,if...else.. 和if... elif ... else 的条件判断! 问题描述:书写一个创建有针对 ...

随机推荐

  1. .ini配置读取

    ini文件的格式 格式 INI文件由节.键.值组成. 节 [section] 参数(键=值) name=value 注解 注解使用分号表示(;).在分号后面的文字,直到该行结尾都全部为注解.     ...

  2. ClientScript.RegisterClientScriptBlock 不执行

    ClientScript.RegisterClientScriptBlock 不执行 页面中 form标签必须加入 runat=server

  3. go环境安装

    选择想要安装的版本: http://golangtc.com/download tar -zxf go1.8.linux-amd64.tar.gz cp -R go/ /usr/local/ vi / ...

  4. Fastjson.tojsonString中$ref对象重复引用问题

    import java.util.ArrayList; import java.util.List; import com.alibaba.fastjson.JSON; import com.alib ...

  5. Selenium2+python自动化29-js处理多窗口【转载】

    本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/tag/js/ 前言 在打开页面上链接的时候,经常会弹出另外一个窗口(多窗口情况前面这篇有讲解: ...

  6. python collections(容器)模块

    原文:http://docs.pythontab.com/interpy/collections/collections/ 容器(Collections) Python附带一个模块,它包含许多容器数据 ...

  7. 利用Excel导出sql语句

    在工作中遇到了需要用数据库的insert语句,本来是极其简单的事情,但是碰到了有n个(n很大)字段的表,写insert语句就是极其痛苦的事情了,即使只是复制粘贴也是很费力不讨好的一件事.正好手头有ex ...

  8. Android_html5交互 弹框localstorage 存值 整体案例

    经历2周多的时间 终于是完成了还算可以的android 整体案例了,分享下给大家  也希望自己有时间回过头来看看当初研究android的纠结心情.痛苦的经历是开发android 大部分都是在网上找解决 ...

  9. 利用js将图片地址进行转义

    利用js将图片地址进行转义 在业务中经常需要将图片从后台获取,然后在前台显示.其中后台存取图片主要分为两种,一种是数据库中获取图片的地址,第二种是存取图片内容的信息.这次主要是前台代码处理第一种情况. ...

  10. HDU 2546.饭卡-动态规划0-1背包

    饭卡 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...