Читабельно распечатать python dict () отсортированный по ключу
Я хотел бы распечатать словарь python в файл с помощью PrettyPrinter (для удобства чтения человеком), но словарь должен быть отсортирован по ключу в выходном файле для дальнейшего улучшения читаемости. Итак:
mydict = {'a':1, 'b':2, 'c':3}
pprint(mydict)
В настоящее время выводит на
{'b':2,
'c':3,
'a':1}
Я хотел бы PrettyPrint словарь, но он распечатан отсортированы по ключу, например.
{'a':1,
'b':2,
'c':3}
каков наилучший способ сделать это?
7 ответов:
на самом деле pprint, кажется, сортировать ключи для вас под python2.5
>>> from pprint import pprint >>> mydict = {'a':1, 'b':2, 'c':3} >>> pprint(mydict) {'a': 1, 'b': 2, 'c': 3} >>> mydict = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5} >>> pprint(mydict) {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5} >>> d = dict(zip("kjihgfedcba",range(11))) >>> pprint(d) {'a': 10, 'b': 9, 'c': 8, 'd': 7, 'e': 6, 'f': 5, 'g': 4, 'h': 3, 'i': 2, 'j': 1, 'k': 0}
но не всегда под python 2.4
>>> from pprint import pprint >>> mydict = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5} >>> pprint(mydict) {'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4} >>> d = dict(zip("kjihgfedcba",range(11))) >>> pprint(d) {'a': 10, 'b': 9, 'c': 8, 'd': 7, 'e': 6, 'f': 5, 'g': 4, 'h': 3, 'i': 2, 'j': 1, 'k': 0} >>>
чтение исходного кода pprint.py (2.5) он сортирует словарь с помощью
items = object.items() items.sort()
для мультилинии или это для одной строки
for k, v in sorted(object.items()):
прежде чем он попытается что-либо напечатать, поэтому, если ваш словарь сортируется правильно, то он должен правильно печатать. В 2.4 второй сортированный() отсутствует (не существует затем) таким образом, объекты, напечатанные на одной строке, не будут отсортированы.
таким образом, ответ, кажется, использовать python2.5, хотя это не совсем объясняет ваш вывод в вопросе.
Python3 Update
довольно печати, отсортированный ключи (lambda x: x[0]):
for key, value in sorted(dict_example.items(), key=lambda x: x[0]): print("{} : {}".format(key, value))
довольно печати, отсортированный значения (lambda x: x[1]):
for key, value in sorted(dict_example.items(), key=lambda x: x[1]): print("{} : {}".format(key, value))
Питон
pprint
модуль на самом деле уже сортировка словарей по ключу. В версиях до Python 2.5 сортировка запускалась только в словарях, чье красиво напечатанное представление охватывало несколько строк, но в 2.5.X и 2.6.X,все словари сортируются.как правило, однако, если вы пишете структуры данных в файл и хотите, чтобы они были удобочитаемыми и доступными для записи, вы можете рассмотреть возможность использования альтернативного формата, такого как YAML или формат JSON. Если ваши пользователи сами не являются программистами, они поддерживают конфигурацию или состояние приложения, сбрасываемые через
pprint
и загружается черезeval
может быть неприятной и подверженной ошибкам задачей.
Я написал следующую функцию для печати диктовок, списков и кортежей в более удобном для чтения формате:
def printplus(obj): """ Pretty-prints the object passed in. """ # Dict if isinstance(obj, dict): for k, v in sorted(obj.items()): print u'{0}: {1}'.format(k, v) # List or tuple elif isinstance(obj, list) or isinstance(obj, tuple): for x in obj: print x # Other else: print obj
пример использования в iPython:
>>> dict_example = {'c': 1, 'b': 2, 'a': 3} >>> printplus(dict_example) a: 3 b: 2 c: 1 >>> tuple_example = ((1, 2), (3, 4), (5, 6), (7, 8)) >>> printplus(tuple_example) (1, 2) (3, 4) (5, 6) (7, 8)
простой способ распечатать отсортированное содержимое словаря, в Python 3:
>>> dict_example = {'c': 1, 'b': 2, 'a': 3} >>> for key, value in sorted(dict_example.items()): ... print("{} : {}".format(key, value)) ... a : 3 b : 2 c : 1
выражение
dict_example.items()
возвращает кортежи, которые затем могут быть отсортированы поsorted()
:>>> dict_example.items() dict_items([('c', 1), ('b', 2), ('a', 3)]) >>> sorted(dict_example.items()) [('a', 3), ('b', 2), ('c', 1)]
Ниже приведен пример красивой печати отсортированного содержимого значений словаря Python.
for key, value in sorted(dict_example.items(), key=lambda d_values: d_values[1]): print("{} : {}".format(key, value))
другой вариант :
>>> mydict = {'a':1, 'b':2, 'c':3} >>> import json
затем с python2 :
>>> print json.dumps(mydict, indent=4, sort_keys=True) # python 2 { "a": 1, "b": 2, "c": 3 }
или с python 3:
>>> print(json.dumps(mydict, indent=4, sort_keys=True)) # python 3 { "a": 1, "b": 2, "c": 3 }