字符串拆分为包含python中列表的字典

时间:2016-09-16 16:45:00

标签: python split

我必须拆分一个看起来像的字符串;

'{ a:[(b,c), (d,e)] , b: [(a,c), (c,d)]}'

并将其转换为dict,其值是包含元组的列表;

{'a':[('b','c'), ('d','e')] , 'b': [('a','c'), ('c','d')]}

在我的情况下; 上面的字符串只是一个例子。所以我实际上要做的是我从服务器获得响应。在服务器端,响应是包含列表和内容的正确字典。但它以某种方式以字符串格式发送给我的客户端。例如

u"{'write_times': [ (1.658935546875, 1474049078179.095), (1.998779296875, 1474049078181.098)],  'read_times': [(0.825927734375, 1474049447696.7249), (1.4638671875, 1474049447696.7249)]}"

我希望它就像它在服务器端一样。

{'write_times': [ ('1.65893554687', '1474049078179.095'), ('1.998779296875', '1474049078181.098')],  'read_times': [('0.825927734375', '1474049447696.7249'), ('1.4638671875', '1474049447696.7249')]}

您提出的解决方案可能无效。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

知道这个字符串的来源非常重要,但是,假设这是你所拥有的,你无法改变它,你可以预先处理将字母数字放入引号并使用ast.literal_eval()安全地评估它:

>>> from ast import literal_eval
>>> import re
>>>
>>> s = '{ a:[(b,c), (d,e)] , b: [(a,c), (c,d)]}'
>>> literal_eval(re.sub(r"(\w+)", r"'\1'", s))
{'a': [('b', 'c'), ('d', 'e')], 'b': [('a', 'c'), ('c', 'd')]}
相关问题