For example, string:
user_info = '{"name" : "john", "gender" : "male", "age": 28}'
We want to convert it into the following dictionary:
user_dict = {"name" : "john", "gender" : "male", "age": 28}
There are several methods:
1. Convert through 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'}
But there is a potential problem in using json for conversion.
The json syntax stipulates that strings in arrays or objects must use double quotes, single quotes cannot be used (there is a description on the official website: "A string is a sequence of zero or more Unicode characters, wrapped in double quotes, using backslash escapes" ). Therefore, the following conversion is wrong:
>>> 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)
2. Converting through eval
>>> user_info = '{"name" : "john", "gender" : "male", "age": 28}' >>> 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'}
does not have the problem of using json to convert above. However, there are security issues with using eval.
3. Using ast.literal_eval for conversion does not have the problem of using json for conversion, nor does it have the security problem of using eval for conversion, so it is recommended to use ast. literal_eval.
For more Python related technical articles, please visit the
Python TutorialThe above is the detailed content of How to turn a string into a dictionary in python. For more information, please follow other related articles on the PHP Chinese website!