IT박스

dict 문자열 출력을 멋지게 포맷하는 방법

itboxs 2021. 1. 6. 07:55
반응형

dict 문자열 출력을 멋지게 포맷하는 방법


다음과 같이 dict-output의 문자열을 포맷하는 쉬운 방법이 있는지 궁금합니다.

{
  'planet' : {
    'name' : 'Earth',
    'has' : {
      'plants' : 'yes',
      'animals' : 'yes',
      'cryptonite' : 'no'
    }
  }
}

..., 간단한 str (dict)는 당신에게 아주 읽기 어려운 것을 줄 것입니다 ...

{'planet' : {'has': {'plants': 'yes', 'animals': 'yes', 'cryptonite': 'no'}, 'name': 'Earth'}}

파이썬에 대해 아는만큼 많은 특수한 경우와 string.replace () 호출로 많은 코드를 작성해야합니다.이 문제 자체는 1000 줄 문제처럼 보이지 않습니다.

이 모양에 따라 dict를 포맷하는 가장 쉬운 방법을 제안하십시오.


출력으로 수행하는 작업에 따라 한 가지 옵션은 디스플레이에 JSON을 사용하는 것입니다.

import json
x = {'planet' : {'has': {'plants': 'yes', 'animals': 'yes', 'cryptonite': 'no'}, 'name': 'Earth'}}

print json.dumps(x, indent=2)

산출:

{
  "planet": {
    "has": {
      "plants": "yes", 
      "animals": "yes", 
      "cryptonite": "no"
    }, 
    "name": "Earth"
  }
}

이 접근 방식에 대한주의 사항은 일부 항목은 JSON으로 직렬화 할 수 없다는 것입니다. 사전에 클래스 또는 함수와 같은 직렬화 할 수없는 항목이 포함 된 경우 일부 추가 코드가 필요합니다.


pprint 사용

import pprint

x  = {
  'planet' : {
    'name' : 'Earth',
    'has' : {
      'plants' : 'yes',
      'animals' : 'yes',
      'cryptonite' : 'no'
    }
  }
}
pp = pprint.PrettyPrinter(indent=4)
pp.pprint(x)

이 출력

{   'planet': {   'has': {   'animals': 'yes',
                             'cryptonite': 'no',
                             'plants': 'yes'},
                  'name': 'Earth'}}

pprint 형식을 사용하여 원하는 결과를 얻을 수 있습니다.


def format(d, tab=0):
    s = ['{\n']
    for k,v in d.items():
        if isinstance(v, dict):
            v = format(v, tab+1)
        else:
            v = repr(v)

        s.append('%s%r: %s,\n' % ('  '*tab, k, v))
    s.append('%s}' % ('  '*tab))
    return ''.join(s)

print format({'has': {'plants': 'yes', 'animals': 'yes', 'cryptonite': 'no'}, 'name': 'Earth'}})

Output:

{
'planet': {
  'has': {
    'plants': 'yes',
    'animals': 'yes',
    'cryptonite': 'no',
    },
  'name': 'Earth',
  },
}

Note that I'm sorta assuming all keys are strings, or at least pretty objects here

ReferenceURL : https://stackoverflow.com/questions/3733554/how-to-format-dict-string-outputs-nicely

반응형