J'ai unicode u"{'code1':1,'code2':1}"
et je le veux au format dictionnaire.
Je le veux au format {'code1':1,'code2':1}
.
J'ai essayé unicodedata.normalize('NFKD', my_data).encode('ascii','ignore')
mais il retourne une chaîne, pas un dictionnaire.
Quelqu'un peut-il m'aider?
Vous pouvez utiliser le package ast
intégré:
import ast
d = ast.literal_eval("{'code1':1,'code2':1}")
Aide sur la fonction literal_eval dans le module ast:
literal_eval (node_or_string)
Évaluez en toute sécurité un nœud d'expression ou une chaîne contenant une expression Python. La chaîne ou le noeud fourni ne peut contenir que les structures littérales Python suivantes: chaînes, nombres, n-uplets, listes, dicts, booléens et aucun.
Vous pouvez utiliser literal_eval
. Vous voudrez peut-être aussi vous assurer que vous créez un dict et pas autre chose. Au lieu de assert
, utilisez votre propre gestion des erreurs.
from ast import literal_eval
from collections import MutableMapping
my_dict = literal_eval(my_str_dict)
assert isinstance(my_dict, MutableMapping)
EDIT: il s'avère que mon hypothèse était incorrecte; comme les clés ne sont pas entourées de guillemets ("), la chaîne n'est pas JSON. Voir ici pour certaines solutions.
Je suppose que ce que vous avez peut-être pourrait être JSON , a.k.a. JavaScript Object Notation.
Vous pouvez utiliser le module json
intégré de Python pour faire ceci:
import json
result = json.loads(u"{'code1':1,'code2':1}") # will NOT work; see above
J'obtenais une erreur Unicode quand je lisais un JSON à partir d'un fichier. Alors celui-ci a fonctionné pour moi.
import ast
job1 = {}
with open('hostdata2.json') as f:
job1= json.loads(f.read())
f.close()
#print type before converting this from unicode to dic would be <type 'unicode'>
print type(job1)
job1 = ast.literal_eval(job1)
print "printing type after ast"
print type(job1)
# this should result <type 'dict'>
for each in job1:
print each
print "printing keys"
print job1.keys()
print "printing values"
print job1.values()