78 votes

Comment sérialiser un dictionnaire Python en une chaîne, puis revenir à un dictionnaire ?

Comment sérialiser un dictionnaire Python en une chaîne, puis revenir à un dictionnaire ? Le dictionnaire contient des listes et d'autres dictionnaires.

11voto

Dan D. Points 17448

Utilisez le module json de Python, ou simplejson si vous n'avez pas python 2.6 ou supérieur.

10voto

yoyo Points 802

Si vous faites entièrement confiance à la chaîne et ne vous souciez pas des attaques par injection de python, alors c'est une solution très simple :

d = { 'method' : "eval", 'safe' : False, 'guarantees' : None }
s = str(d)
d2 = eval(s)
for k in d2:
    print k+"="+d2[k]

Si vous êtes plus soucieux de la sécurité, alors ast.literal_eval est un meilleur pari.

6voto

Przemek D Points 325

Une chose que json ne peut pas faire est dict indexé avec des chiffres. L'extrait suivant

import json
dictionary = dict({0:0, 1:5, 2:10})
serialized = json.dumps(dictionary)
unpacked   = json.loads(serialized)
print(unpacked[0])

lancera

KeyError: 0

Parce que les clés sont converties en chaînes. cPickle conserve le type numérique et le dict déballé peut être utilisé immédiatement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X