여러 줄에 사전 pprint


81

사전의 예쁜 인쇄물을 얻으려고 노력하고 있지만 운이 없습니다.

>>> import pprint
>>> a = {'first': 123, 'second': 456, 'third': {1:1, 2:2}}
>>> pprint.pprint(a)
{'first': 123, 'second': 456, 'third': {1: 1, 2: 2}}

출력이 다음과 같이 여러 줄에 표시되기를 원했습니다.

{'first': 123,
 'second': 456,
 'third': {1: 1,
           2: 2}
}

할 수 있습니까 pprint? 그렇지 않은 경우 어떤 모듈이 수행합니까? 저는 Python 2.7.3을 사용하고 있습니다.


이것이 귀하의 질문에 대답합니까? 중첩 된 사전을 예쁜 인쇄하는 방법?
Georgy

@Georgy는 그렇지 않습니다. 그 질문에서 원하는 출력은 여기에있는 것과 동일하지 않습니다
mulllhausen

답변:


99

사용 width=1또는 width=-1:

In [33]: pprint.pprint(a, width=1)
{'first': 123,
 'second': 456,
 'third': {1: 1,
           2: 2}}

1
음의 너비는 무엇을합니까?
Tim

1
@Tim : 방금 시도했는데 효과가 있었지만 어딘가에 문서화되어 있는지 모르겠습니다.
Warren Weckesser 2013

1
네거티브 너비는 특별한 작업을 수행하지 않습니다. 코드가 진행됨에 따라 부분 출력 문자열의 길이가 < width. 음의 너비는 대답이 항상 "아니오"임을 의미합니다. 너비가 0이면 거의 항상 (또는 항상-나는 비뚤어진 경우에 대해 충분히 생각하지 않습니다 ;-)) 똑같이 할 것입니다.
Tim Peters

1
@TimPeters : 네, 소스를 살펴 보았습니다. width == 0 (오류가 발생 함)에 대한 검사가 있지만 0은 부정적인 값과 동일하게 처리 될 수있는 것 같습니다. 항상 "아니오"라고 대답하면 해를 끼치 지 않습니다.
Warren Weckesser 2013

36

dict를 json으로 변환 할 수 있습니다. json.dumps(d, indent=4)

print(json.dumps(item, indent=4))
{
    "second": 456,
    "third": {
        "1": 1,
        "2": 2
    },
    "first": 123
}

다른 솔루션보다 훨씬 예뻐
에릭 Aronesty

4
@ErikAronesty null및 부울 값 (true / false)에 주의해야합니다 . 파이썬 객체가 아닌 JSON 값입니다.
라이언 추

1
좋아 간단한 경우에 대한 솔루션,하지만 변환 JSON 값으로 값 파이썬 (@RyanChou는 지적)과 것이 바람직 나 (와 같은 가능하지 않을 수도 있습니다 datetime) : json.dumps({'d': datetime.now()})와 충돌합니다 Object of type datetime is not JSON serializable.
Andrey

25

환경 변수를 예쁘게 인쇄하려는 경우 다음을 사용하십시오.

pprint.pprint(dict(os.environ), width=1)

3

Ryan Chou의 이미 매우 유용한 답변에 추가 할 두 가지 사항 :

  • sort_keys당신의 dict, esp에 대한 더 쉬운 시각적 grok에 대한 인수를 전달하십시오 . 3.6 이전 Python으로 작업하는 경우 (사전 순서가 지정되지 않음)
print(json.dumps(item, indent=4, sort_keys=True))
"""
{
    "first": 123,
    "second": 456,
    "third": {
        "1": 1,
        "2": 2
    }
}
"""
  • dumps() 사전 키가 프리미티브 (문자열, 정수 등) 인 경우에만 작동합니다.

산뜻한! sort_keys훌륭한 주장입니다. 안타깝게도 항상 해당되는 것은 아닙니다. TypeError: Object of type Tag is not JSON serializable...
PatrickT
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.