web-dev-qa-db-fra.com

Dictionnaire pprint sur plusieurs lignes

J'essaie d'obtenir une jolie copie d'un dictionnaire, mais je n'ai pas de chance:

>>> import pprint
>>> a = {'first': 123, 'second': 456, 'third': {1:1, 2:2}}
>>> pprint.pprint(a)
{'first': 123, 'second': 456, 'third': {1: 1, 2: 2}}

Je voulais que la sortie soit sur plusieurs lignes, quelque chose comme ceci:

{'first': 123,
 'second': 456,
 'third': {1: 1,
           2: 2}
}

Est-ce que pprint peut le faire? Si non, alors quel module fait-il? J'utilise Python 2.7. .

56
mulllhausen

Utilisation width=1 ou width=-1:

In [33]: pprint.pprint(a, width=1)
{'first': 123,
 'second': 456,
 'third': {1: 1,
           2: 2}}
73
Warren Weckesser

Vous pouvez convertir le dict en json via json.dumps(d, indent=4)

print(json.dumps(item, indent=4))
{
    "second": 456,
    "third": {
        "1": 1,
        "2": 2
    },
    "first": 123
}
22
Ryan Chou

Si vous essayez d’imprimer assez les variables d’environnement, utilisez:

pprint.pprint(dict(os.environ), width=1)
20
UngodlySpoon

Deux choses à ajouter à la réponse déjà très utile de Ryan Chou:

  • transmettez l’argument sort_keys pour faciliter la lecture visuelle de votre dict, esp. si vous travaillez avec les versions antérieures à 3.6 Python (dans lequel les dictionnaires ne sont pas ordonnés)
print(json.dumps(item, indent=4, sort_keys=True))
"""
{
    "first": 123,
    "second": 456,
    "third": {
        "1": 1,
        "2": 2
    }
}
"""
  • dumps() ne fonctionnera que si les clés du dictionnaire sont des primitives (chaînes, int, etc.)
1
Zach Valenta