我有一个字典,显示为:
my_string = "{'C': [(1, 2, 'string'), (3, 4, 'second string')]}"
由于某种原因,即使它看起来像是dict
,但当我检查type(my_string)
时,它似乎是一个字符串。
当我尝试通过dict(my_string)
将其转换为字典时,遇到错误:
ValueError:字典更新序列元素#0的长度为1; 2是 必填
答案 0 :(得分:1)
如果是字符串,则应该能够使用抽象语法树库中的ast.literal_eval
将其解析为字典。
安全地评估表达式节点或包含Python文字或容器显示的字符串。提供的字符串或节点只能由以下Python文字结构组成:字符串,字节,数字,元组,列表,字典,集合,布尔值和无。
import ast.literal_eval()
s = "{'C': [(1, 2, 'string'), (3, 4, 'second string')]}"
d = ast.literal_eval(s)
print(type(d))
# dict
print(d)
# {'C': [(1, 2, 'string'), (3, 4, 'second string')]}
答案 1 :(得分:0)
您可以使用python 2.6提供的ast.literal_eval
:
import ast
my_string = "{'C': [(1, 2, 'string'), (3, 4, 'second string')]}"
my_dic = ast.literal_eval(my_string)
print(type(my_dic))
print(my_dic)
输出:
$ python conv_dic.py
<type 'dict'>
{'C': [(1, 2, 'string'), (3, 4, 'second string')]}
答案 2 :(得分:0)
另一种选择是使用json.loads
将字符串解析为json对象。
这意味着该字符串必须是有效的json,在您的情况下,这会导致字符'
,(
和)
的某些相当笨拙的替换操作:
>>> import json
>>> s = "{'C': [(1, 2, 'string'), (3, 4, 'second string')]}"
>>> s.replace("'", '"').replace('(', '[').replace(')', ']')
>>> s
'{"C": [[1, 2, "string"], [3, 4, "second string"]]}'
>>> d = json.loads(s)
>>> d
{'C': [[1, 2, 'string'], [3, 4, 'second string']]}