Ope*_*ous 2 python string list
我有一个格式如下所示的列表:
>>> x = "[26, 25]"
>>> list(x)
['[', '2', '6', ',', ' ', '2', '5', ']']
Run Code Online (Sandbox Code Playgroud)
如何转换为包含如下所示元素的列表:
>>> x
[25, 26]
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 14
import ast
ast.literal_eval(x)
Run Code Online (Sandbox Code Playgroud)
或者将其视为JSON,使用json.loads():
import json
json.loads(x)
Run Code Online (Sandbox Code Playgroud)
ast.literal_eval()将Python文字作为输入(因此Python源代码中的文本会给你一个值),json.loads()接受JSON输入.
演示:
>>> import ast, json
>>> x = "[26, 25]"
>>> ast.literal_eval(x)
[26, 25]
>>> json.loads(x)
[26, 25]
Run Code Online (Sandbox Code Playgroud)
只有在输入字符串中有一个以上的整数列表时,两者之间的区别才会发挥作用; JSON字符串包含unicode,它ast.literal_eval()在Python 2上无法正确解释,而JSON类型只是ast.literal_eval()支持的子集.
>>> x = '["List", "with", "strings", "including", "snowman", "\u2603"]'
>>> ast.literal_eval(x)
['List', 'with', 'strings', 'including', 'snowman', '\\u2603']
>>> json.loads(x)
[u'List', u'with', u'strings', u'including', u'snowman', u'\u2603']
>>> x = "(1, 2, 3, 'a tuple is Python syntax, not JSON')"
>>> ast.literal_eval(x)
(1, 2, 3, 'a tuple is Python syntax, not JSON')
>>> json.loads(x)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python2.7/json/__init__.py", line 338, in loads
return _default_decoder.decode(s)
File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python2.7/json/decoder.py", line 365, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python2.7/json/decoder.py", line 383, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
Run Code Online (Sandbox Code Playgroud)