예:
코드는 다음과 같습니다.
d = { "root": { "folder2": { "item2": None, "item1": None }, "folder1": { "subfolder1": { "item2": None, "item1": None }, "subfolder2": { "item3": None } } } }
아름다운 출력은 다음과 같습니다.
특성 관찰:
1. 같은 레벨의 키는 왼쪽 정렬됩니다. 즉, 들여쓰기가 동일합니다.
d = { "root": { "folder2": { "item2": None, "item1": None }, "folder1": { "subfolder1": { "item2": None, "item1": None }, "subfolder2": { "item3": None } } } }
2. 숫자 뒤의 줄을 변경하세요.
3. 값이 사전, 즉 중첩 사전인 경우 중첩 사전은 다음 수준에 있으며 각 수준의 키 들여쓰기는 다릅니다.
아이디어 분석:
이것은 "연결 문자열" 문제이며, 요소는 ""{}:, n 및 공백 들여쓰기입니다.
각 (k, v) 키-값 쌍을 탐색하고, 수확량을 위해 함께 연결하고, 중첩된 사전을 만나면 반복됩니다(즉, 재귀 + 수확량).
코드를 업로드하세요.
#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 구성 사용자 정의 방법과 관련 기사를 더 보려면 PHP 중국어 웹사이트에 주목하세요!