>  기사  >  백엔드 개발  >  Python은 사전 구조 출력을 아름답게 하기 위해 사용자 정의 메소드를 구성합니다.

Python은 사전 구조 출력을 아름답게 하기 위해 사용자 정의 메소드를 구성합니다.

高洛峰
高洛峰원래의
2018-05-29 10:33:582372검색

예:

코드는 다음과 같습니다.

d = { "root": { "folder2": { "item2": None, "item1": None }, "folder1": { "subfolder1": { "item2": None, "item1": None }, "subfolder2": { "item3": None } } } }

아름다운 출력은 다음과 같습니다.

Python은 사전 구조 출력을 아름답게 하기 위해 사용자 정의 메소드를 구성합니다.

특성 관찰:
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 중국어 웹사이트에 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.