Czy istnieje sposób, aby poprawnie wydrukować uporządkowane słowniki?
Podoba mi się moduł pprint w Pythonie. Często go używam do testowania i debugowania. Często używam opcji szerokości, aby upewnić się, że wyjście dobrze pasuje do mojego okna terminala.
Działało dobrze, dopóki nie dodali nowego
uporządkowany typ słownika
http://www.python.org/dev/peps/pep-0372/
w Pythonie 2.7 (kolejna fajna funkcja, którą bardzo lubię). Jeśli spróbuję ładnie wydrukować uporządkowany słownik, nie wyświetla się on dobrze. Zamiast umieszczać każdą parę klucz-wartość w osobnym wierszu, wszystko to pojawia się w jednym długim wierszu, który zawija się wiele razy i jest trudny do odczytania.
Czy ktoś tutaj ma sposób, aby ładnie drukować jak stare, nieuporządkowane słowniki? Prawdopodobnie mógłbym coś wymyślić, może używając metody PrettyPrinter.format, gdybym spędził wystarczająco dużo czasu, ale zastanawiam się, czy ktoś tutaj już zna rozwiązanie.
UPDATE:
Złożyłem w tej sprawie raport o błędzie. Możesz to zobaczyć pod adresem
http://bugs.python.org/issue10592
http://bugs.python.org/issue10592
.
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
15 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Tracisz informacje o typie, ale ładnie wygląda i zachowuje porządek.
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
poprzedni,
https://stackoverflow.com/a/4302635/355230
czy on jest
będzie
obsługuje w innym kontenerze, takim jak i powinien być w stanie obsłużyć wszelkie dodatkowe argumenty słów kluczowych, jednak nie ma takiego samego stopnia kontroli nad danymi wyjściowymi jak inny.
Działa poprzez przekierowanie wyjścia funkcji stock do tymczasowego bufora, a następnie zawijanie go słowem przed wysłaniem go do strumienia wyjściowego. Chociaż wynik końcowy nie jest wyjątkowo ładny, jest przyzwoity i można go użyć jako obejścia.
Aktualizacja 2.0.0
Uproszczony dzięki standardowej bibliotece modułów i zmodyfikowany do pracy w
zarówno Python 2, jak i 3.
Przykład danych wyjściowych:
»
»
OrderedDict([('john', 1), ('paul', 2),
»
('mary', 3)]), OrderedDict([('moe', 1),
OrderedDict([('weapons', 1), ('mass',
Anonimowy użytkownik
Potwierdzenie od:
ja robię
Co daje
lub
co daje
Anonimowy użytkownik
Potwierdzenie od:
Zauważ, że ma to wpływ na funkcję .
Więc możesz chcieć zapisać i przywrócić nadpisania funkcji po wpisaniu.
Anonimowy użytkownik
Potwierdzenie od:
Jeśli chcesz ładnie wydrukować słownik z kluczami w posortowanej kolejności
Anonimowy użytkownik
Potwierdzenie od:
To wszystko ^^
lub
Anonimowy użytkownik
Potwierdzenie od:
Miałem na celu uzyskanie prawie yamlowego wyjścia ze zwięzłym kodem w Pythonie, ale nie do końca to zrobiłem.
i niektóre dane testowe przy użyciu list OrderedDict i OrderedDicts ... (sheesh Python potrzebuje literałów OrderedDict bardzo źle ...)
generuje następujący wynik:
Zastanawiałem się, jak użyć str.format () w celu lepszego wyrównania, ale nie miałem ochoty się w to zagłębiać. Będziesz musiał dynamicznie ustawiać szerokość marginesu w zależności od rodzaju wyrównania, które chcesz, które będzie złożone lub uciążliwe.
W każdym razie to pokazuje mi moje dane w czytelnej formie hierarchicznej, więc to działa dla mnie!
Anonimowy użytkownik
Potwierdzenie od:
Zmuszasz do używania zwykłego przestawienia opartego na dyktowaniu, a także wyłączasz sortowanie na czas trwania połączenia, aby żadne klucze nie były faktycznie sortowane do drukowania.
Anonimowy użytkownik
Potwierdzenie od:
True
domyślnie, ustawiając ją na
False
, słownik pozostanie nieposortowany.
Wyświetli:
Połączyć:
https://docs.python.org/3/ library/pprint.html
https://docs.python.org/3/library/pprint.html
Anonimowy użytkownik
Potwierdzenie od:
Oto tanie rozwiązanie, które powinno działać,
jeśli nie obchodzi Cię kolejność widoczna na wyjściu PPRINT
, która może być duża, jeśli:
Jestem naprawdę zaskoczony, że zamówienie nie przetrwało ... cóż, w porządku.
Anonimowy użytkownik
Potwierdzenie od:
kzh
https://coderoad.ru/4301069/
:
Zachowuje porządek i generuje prawie to samo, co
i
https://coderoad.ru/4301069/
odpowiedź webwursta (
drukuj przez json dump
).
Anonimowy użytkownik
Potwierdzenie od:
W przypadku języka Python & < 3,8 (np. 3,6):
>
Małpa łata jest , aby zapobiec sortowaniu.
Będzie to miało tę zaletę, że wszystko działa rekurencyjnie i jest bardziej odpowiednie niż opcja dla tych, którzy muszą na przykład użyć parametru :
<pre class="lang-py prettyprint-override">
Edytuj Usuń
>
Aby posprzątać po tym bałaganie, po prostu uruchom: W rzeczywistości poprawnym rozwiązaniem może być nawet użycie pliku contextmanager:
<pre class="lang-py prettyprint-override">
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
lub