2014-09-05 6 views
1

나는 prettyprint로보기 위해 인쇄하고있는 큰 사전을 가지고 있지만 어떻게 pprint에서 정렬 메커니즘을 죽여도 계속 서식을 유지할 수 있습니까?pprint 출력에서 ​​정렬 메커니즘을 사용하지 않음

+0

[문서] (https://docs.python.org/2/library/pprint.html)에서 2.5 * "사전은 디스플레이가 계산되기 전에 키별로 정렬됩니다"* - 터닝 옵션이 없습니다 이거 벗었 어. – jonrsharpe

+2

* 왜 * 정렬을 해제 하시겠습니까? 사전 요소가 예상 한 순서대로 정렬되지 않으면 운이 좋지 않습니다. 사전은 순서가 지정되지 않습니다. –

답변

0

monkey patch pprint 모듈을 사용할 수 있습니다. 2 출력이 essentiallly 무작위로 분류되어 있기 때문에

import pprint 

pprint.pprint({"abc":1,"def":2,"ghi":3}) 
pprint._sorted = lambda x:x 
pprint.pprint({"abc":1,"def":2,"ghi":3}) 

, 당신의 출력은 광산에서 다를 수 있습니다 :

{'abc': 1, 'def': 2, 'ghi': 3} 
{'abc': 1, 'ghi': 3, 'def': 2} 


사용하기 더 복잡하지만, 쉽게 다른 버전 :

import pprint 
import contextlib 

@contextlib.contextmanager 
def pprint_nosort(): 
    orig,pprint._sorted = pprint._sorted, lambda x:x 
    try: 
     yield 
    finally: 
     pprint._sorted = orig 

# For times when you don't want sorted output 
with pprint_nosort(): 
    pprint.pprint({"abc":1,"def":2,"ghi":3}) 

# For times when you do want sorted output 
pprint.pprint({"abc":1,"def":2,"ghi":3})