Comment transformer une chaîne en dictionnaire en python

Libérer: 2019-07-05 14:27:29
original
9432 Les gens l'ont consulté

Comment transformer une chaîne en dictionnaire en python

Par exemple, chaîne :

user_info = '{"name" : "john", "gender" : "male", "age": 28}'
Copier après la connexion

Nous souhaitons la convertir dans le dictionnaire suivant :

user_dict = {"name" : "john", "gender" : "male", "age": 28}
Copier après la connexion

Il existe plusieurs méthodes :

1. Convertir via json

>>> import json
>>> user_info= '{"name" : "john", "gender" : "male", "age": 28}'
>>> user_dict = json.loads(user_info)
>>> user_dict
{u'gender': u'male', u'age': 28, u'name': u'john'}
Copier après la connexion

Mais il existe un problème potentiel lors de l'utilisation de json pour la conversion.

La syntaxe JSON stipule que les chaînes dans les tableaux ou les objets doivent utiliser des guillemets doubles, les guillemets simples ne peuvent pas être utilisés (il y a une description sur le site officiel : "Une chaîne est une séquence de zéro ou plusieurs caractères Unicode, enveloppés dans guillemets doubles, en utilisant des barres obliques inverses" ). Par conséquent, la conversion suivante est erronée :

>>> import json
>>> user_info = "{'name' : 'john', 'gender' : 'male', 'age': 28}"
# 由于字符串使用单引号,会导致运行出错
>>> user_dict = json.loads(user_info)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 339, in loads
    return _default_decoder.decode(s)
  File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 380, in raw_decode
    obj, end = self.scan_once(s, idx)
ValueError: Expecting property name: line 1 column 2 (char 1)
Copier après la connexion

2. La conversion via eval

>>> user_info = &#39;{"name" : "john", "gender" : "male", "age": 28}&#39;
>>> user_dict = eval(user_info)
>>> user_dict
{'gender': 'male', 'age': 28, 'name': 'john'}
>>> user_info = "{'name' : 'john', 'gender' : 'male', 'age': 28}"
>>> user_dict = eval(user_info)
>>> user_dict
{'gender': 'male', 'age': 28, 'name': 'john'}
Copier après la connexion

n'a pas le problème d'utiliser json pour convertir ci-dessus. Cependant, l'utilisation d'eval pose des problèmes de sécurité.

3. Utilisez ast.literal_eval pour la conversion via literal_eval

>>> import ast
>>> user = &#39;{"name" : "john", "gender" : "male", "age": 28}&#39;
>>> user_dict = ast.literal_eval(user)
>>> user_dict
{&#39;gender&#39;: &#39;male&#39;, &#39;age&#39;: 28, &#39;name&#39;: &#39;john&#39;}
user_info = "{&#39;name&#39; : &#39;john&#39;, &#39;gender&#39; : &#39;male&#39;, &#39;age&#39;: 28}"
>>> user_dict = ast.literal_eval(user)
>>> user_dict
{&#39;gender&#39;: &#39;male&#39;, &#39;age&#39;: 28, &#39;name&#39;: &#39;john&#39;}
Copier après la connexion

Il n'y a ni le problème de l'utilisation de json pour la conversion, ni le problème de sécurité de l'utilisation de eval pour la conversion, il est donc recommandé d'utiliser ast.literal_eval.

Pour plus d'articles techniques liés à Python, veuillez visiter la colonne Tutoriel Python pour apprendre !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal