[英]change dictionary values to dictionaries from list of dictionaries in python
[英]In python how do I change dictionary values from strings into dictionaries?
我有以下形式的字典: 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}'}
我怎样才能把它变成字典的字典? 我试过了:
for k, v in d.items():
v = ast.literal_eval(v)
但这不起作用。 由于我的每个伪嵌套字典实际上都是一个字符串,我如何在字典中更改它们的数据类型?
您可以使用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}]}
如您所见,唯一的区别是( )
⟷ [ ]
我已经更正了 json 并删除了不必要的双引号和逗号如果您想将字典作为值,您必须将值作为字典数组。
import json
d={741178:
u'{"width":37.8365,"height":150,"length":234},'
u'{"width":35.7,"height":178,"length":122}',
741179: u'{"width":98.67,"height":180,"length":994},'
u'{"width":98.79,"height":167.8,"length":154.22}'
}
for key, value in d.items():
d[key]= json.loads('['+value+']')
print(d)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.