2014-09-05 4 views
1

У меня есть большой словарь, который я печатаю для просмотра с красивым рисунком, но как я могу сохранить форматирование, но убить механизм сортировки в pprint?Отключение механизма сортировки в выводе pprint

+0

Из [документации] (https://docs.python.org/2/library/pprint.html), так как 2.5 * «Словари сортируются по ключу перед вычислением дисплея» * - нет возможности для тура Это невозможно. – jonrsharpe

+2

* Почему вы хотите отключить сортировку? Если вы ожидаете, что словарные элементы будут в том порядке, в котором вы их разместите, вам не повезло, словари неупорядочены. –

ответ

0

Вы можете monkey patch модуль pprint.

import pprint 

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

Поскольку второй выход essentiallly случайным образом отсортирован, ваш вывод может отличаться от моего:

{'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}) 
Смежные вопросы