您可以使用ast.literal_eval() 或json.loads(),在这种情况下输出几乎相同。但是,对于 JSON,您必须将字符串括在方括号中,因为它们都包含两个用逗号分隔的字典,因此获取它们的唯一合理方法是作为字典列表。对于 Python 文字,省略方括号(或用括号替换它们)会导致每对以逗号分隔的字典被解释为 2 元组(应该是双精度,但已经有不同的含义)。
我个人推荐使用json.loads(),因为JSON目前是新项目中最常用的数据交换格式。如果您的字符串源可以添加方括号以生成有效的 JSON,那将是最好的。
import ast
import json
d = {741178: u'{"width":37.8365,"height":150,"length":234},{"width":35.7,"height":178,"length":122}',
741179: u'{"width":98.67,"height":180,"length":994},{"width":98.79,"height":167.8,"length":154.22}'}
p = {k: ast.literal_eval(v) for k, v in d.items()}
j = {k: json.loads('['+v+']') for k, v in d.items()}
print(p)
print(j)
# {741178: ({'width': 37.8365, 'height': 150, 'length': 234}, {'width': 35.7, 'height': 178, 'length': 122}), 741179: ({'width': 98.67, 'height': 180, 'length': 994}, {'width': 98.79, 'height': 167.8, 'length': 154.22})}
# {741178: [{'width': 37.8365, 'height': 150, 'length': 234}, {'width': 35.7, 'height': 178, 'length': 122}], 741179: [{'width': 98.67, 'height': 180, 'length': 994}, {'width': 98.79, 'height': 167.8, 'length': 154.22}]}
如你所见,唯一的区别是( )⟷[ ]