我必须拆分一个看起来像的字符串;
'{ 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')]}
您提出的解决方案可能无效。有什么想法吗?
答案 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')]}