chaîne à une analyse syntaxique dict [double]
-
22-09-2019 - |
Question
Cette question a déjà une réponse ici:
I ai une sortie de chaîne qui est sous forme d'une dict ex.
{'key1':'value1','key2':'value2'}
comment peut facilement faire enregistrer comme un dict et non comme une chaîne?
La solution
astr est une chaîne qui est « sous la forme d'une dict ».
ast.literal_eval
il se transforme en un objet dict python.
In [110]: import ast
In [111]: astr="{'key1':'value1','key2':'value2'}"
In [113]: ast.literal_eval(astr)
Out[113]: {'key1': 'value1', 'key2': 'value2'}
Autres conseils
Il est préférable si vous êtes en Python 2.6+, car il est pas soumis aux failles de sécurité dans eval.
import ast
s = """{'key1':'value1','key2':'value2'}"""
d = ast.literal_eval(s)
Où êtes-vous cette chaîne à partir? Est-il au format JSON? ou format dictionnaire python? ou tout simplement un format ad hoc qui se trouve être semblable à des dictionnaires de python?
Si c'est JSON, ou si elle est seulement un dict, et ne contient que des chaînes et / ou des chiffres, vous pouvez utiliser json.loads
, il est l'option la plus sûre car il peut tout simplement pas analyser le code python.
Cette approche a des lacunes mais, si, par exemple, les chaînes sont placées entre guillemets simples '
au lieu de guillemets doubles "
, sans oublier qu'il ne parse objets JSON / tableaux, qui ne par hasard arriver à partager la même syntaxe avec pythons dicts / tableaux.
Bien que je pense qu'il est probable que la chaîne que vous obtenez est destiné à être au format JSON. Je fais cette hypothèse parce qu'il est un format commun pour l'échange de données.
à l'aide json.loads - peut être plus rapide