如何将字符串转换为看起来已经是字典的字典?

时间:2019-05-28 01:47:03

标签: python dictionary

我有一个字典,显示为:

my_string = "{'C': [(1, 2, 'string'), (3, 4, 'second string')]}"

由于某种原因,即使它看起来像是dict,但当我检查type(my_string)时,它似乎是一个字符串。

当我尝试通过dict(my_string)将其转换为字典时,遇到错误:

  

ValueError:字典更新序列元素#0的长度为1; 2是   必填

3 个答案:

答案 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']]}