Python - большой отпечаток, хорошо диктовать? - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь красиво напечатать словарь, который может стать довольно большим, и я хочу сделать его как можно более читабельным.Хотя это все еще не похоже на то, как я написал бы это вручную (с новыми строками и отступами, когда это необходимо).

Я пытаюсь иметь такой формат (отступ с двумя пробелами):

{
  'a': {
         '1': [],
         '2': []
       },
  'b': {
         '1': [],
         '2': [],
       }
}

Теперь изначально dict выглядит так (без использования pprint):

{'test': {'0.2.0': {'deploy': {'some.host.com': {'outputs': [], 'inputs': []}},
   'release': {'some.git': {'outputs': [], 'inputs': []}}},
  '0.1.0': {'deploy': {'some.host.com': {'outputs': [], 'inputs': []}},
   'release': {'some.git': {'outputs': [], 'inputs': []}}}},
 'stage': {'0.1.0': {'deploy': {'stage.com': {'outputs': [], 'inputs': []}},
   'release': {'stage.git': {'outputs': [], 'inputs': []}}}}}

с: pprint.pprint(my_dict), выглядит так:

{'stage': {'0.1.0': {'deploy': {'stage.com': {'inputs': [], 'outputs': []}},
                     'release': {'stage.git': {'inputs': [], 'outputs': []}}}},
 'test': {'0.1.0': {'deploy': {'some.host.com': {'inputs': [], 'outputs': []}},
                    'release': {'some.git': {'inputs': [], 'outputs': []}}},
          '0.2.0': {'deploy': {'some.host.com': {'inputs': [], 'outputs': []}},
                    'release': {'some.git': {'inputs': [], 'outputs': []}}}}}

Ну, не так уж и отличается.Я пытался играть с pprint.pprint опциями, такими как indent, width, compact, но ни одна из них не отформатировала так, как я хочу.Можно ли добиться такого же форматирования с помощью pprint, как я упоминал выше?Или, может быть, есть какой-то лучший инструмент для этого?

PS Если бы вы предложили какой-нибудь другой инструмент, было бы здорово иметь возможность записи в файл с помощью этого инструмента aswel.Потому что я использую pprint для прямой записи в файл.

Ответы [ 3 ]

0 голосов
/ 09 ноября 2018

Вы можете сделать это с помощью JSON-модуля

import json
_d = {'a': {'1': [],'2': []},'b': {'1': [],'2': [],}}
print json.dumps(_d, indent=2)
0 голосов
/ 09 ноября 2018

Немного хакерский, и он не выигрывает никаких цен за обобщение на другие проблемы (хотя это может быть исправлено с некоторыми усилиями), но вы также можете рассмотреть что-то подобное. Будет напечатан результат, который намного компактнее формата json:

d = {'test': {'0.2.0': {'deploy': {'some.host.com': {'outputs': [], 'inputs': []}},
   'release': {'some.git': {'outputs': [], 'inputs': []}}},
  '0.1.0': {'deploy': {'some.host.com': {'outputs': [], 'inputs': []}},
   'release': {'some.git': {'outputs': [], 'inputs': []}}}},
 'stage': {'0.1.0': {'deploy': {'stage.com': {'outputs': [], 'inputs': []}},
   'release': {'stage.git': {'outputs': [], 'inputs': []}}}}}

print(pd.DataFrame({
    (i,j, k, l, m): str(d[i][j][k][l][m])
    for i in d.keys() 
    for j in d[i].keys() 
    for k in d[i][j].keys() 
    for l in d[i][j][k].keys() 
    for m in d[i][j][k][l].keys()
}, index = [0]
).T
0 голосов
/ 09 ноября 2018

Используйте библиотеку JSON .

Пример

>>> my_dict = {'test': {'0.2.0': {'deploy': {'some.host.com': {'outputs': [], 'inputs': []}},
   'release': {'some.git': {'outputs': [], 'inputs': []}}},
  '0.1.0': {'deploy': {'some.host.com': {'outputs': [], 'inputs': []}},
   'release': {'some.git': {'outputs': [], 'inputs': []}}}},
 'stage': {'0.1.0': {'deploy': {'stage.com': {'outputs': [], 'inputs': []}},
   'release': {'stage.git': {'outputs': [], 'inputs': []}}}}}... ... ... ... ...
>>>
>>> import json
>>> print(json.dumps(my_dict, indent=2))
{
  "test": {
    "0.2.0": {
      "deploy": {
        "some.host.com": {
          "outputs": [],
          "inputs": []
        }
      },
      "release": {
        "some.git": {
          "outputs": [],
          "inputs": []
        }
      }
    },
    "0.1.0": {
      "deploy": {
        "some.host.com": {
          "outputs": [],
          "inputs": []
        }
      },
      "release": {
        "some.git": {
          "outputs": [],
          "inputs": []
        }
      }
    }
  },
  "stage": {
    "0.1.0": {
      "deploy": {
        "stage.com": {
          "outputs": [],
          "inputs": []
        }
      },
      "release": {
        "stage.git": {
          "outputs": [],
          "inputs": []
        }
      }
    }
  }
}
...