Comment puis-je convertir la str
représentation d'un dict
, comme la chaîne suivante, en un dict
?
s = "{'muffin' : 'lolz', 'foo' : 'kitty'}"
Je préfère ne pas l'utiliser eval
. Que puis-je utiliser d'autre?
La principale raison à cela, est l'une de mes classes de collègues qu'il a écrite, convertit toutes les entrées en chaînes. Je ne suis pas d'humeur à aller modifier ses cours, pour faire face à ce problème.
python
string
dictionary
UberJumper
la source
la source
"
des guillemets autour de vos chaînes, vous avez probablement des données JSON. Vous pouvez également recherchernull
,true
oufalse
, les utilisations de la syntaxe PythonNone
,True
etFalse
.Réponses:
À partir de Python 2.6, vous pouvez utiliser le intégré
ast.literal_eval
:C'est plus sûr que d'utiliser
eval
. Comme le disent ses propres documents:Par exemple:
la source
"dict(a=1)"
des cordes de style?https://docs.python.org/3.8/library/json.html
JSON peut résoudre ce problème bien que son décodeur veuille des guillemets doubles autour des clés et des valeurs. Si cela ne vous dérange pas de remplacer un hack ...
REMARQUE: si vous avez des guillemets simples dans le cadre de vos clés ou valeurs, cela échouera en raison d'un remplacement de caractères incorrect. Cette solution n'est recommandée que si vous avez une forte aversion pour la solution eval.
En savoir plus sur le guillemet simple json: jQuery.parseJSON génère une erreur "JSON invalide" en raison d'un guillemet simple échappé dans JSON
la source
{"foo": "b'ar"}
{'foo': (1, 2, 3)}
+1
pour informer que le décodeur veut des guillemets doubles autour des clés et des valeurs."{0: 'Hello'}"
.utilisant
json.loads
:la source
À l'exemple d'OP:
Nous pouvons utiliser Yaml pour gérer ce type de json non standard en chaîne:
la source
Si la chaîne peut toujours être fiable, vous pouvez utiliser
eval
(ou utiliserliteral_eval
comme suggéré; c'est sûr quelle que soit la chaîne.) Sinon, vous avez besoin d'un analyseur. Un analyseur JSON (tel que simplejson) fonctionnerait s'il ne stocke que du contenu qui correspond au schéma JSON.la source
Utilisez
json
. laast
bibliothèque consomme beaucoup de mémoire et et plus lentement. J'ai un processus qui doit lire un fichier texte de 156 Mo.Ast
avec 5 minutes de retard pour le dictionnaire de conversionjson
et 1 minutes en utilisant 60% de mémoire en moins!la source
Résumer:
Résultats:
Conclusion: préférez json.loads
la source
la source
{
ou}
. Et s'il est imbriquédict
. Et si la valeur contient,
??aucune bibliothèque n'est utilisée:
REMARQUE: comme il a été codé
split("'")
en dur, il ne fonctionnera que pour les chaînes où les données sont entre guillemets simples.la source