[英]Nested dictionaries - obtaining values (Python)
我有一个从XML转换为原始等式的JSON文件:x ^ 2 + 4 * x + 4 = 0:
{
"mrow": {
"mrow": {
"msup": {
"mi": "x",
"mn": "2"
},
"mo": [
"+",
"+"
],
"mrow": {
"mn": "4",
"mo": "*",
"mi": "x"
},
"mn": "4"
},
"mo": "=",
"mn": "0"
}
}
当我使用Python打开此文件时,会得到嵌套字典,如下所示:
{'mrow': {'mrow': {'msup': {'mi': 'x', 'mn': '2'}, 'mo': ['+', '+'], 'mrow': {'mn': '4', 'mo': '*', 'mi': 'x'}, 'mn': '4'}, 'mo': '=', 'mn': '0'}}
是否有一种简单的方法来仅获取表示初始方程式的值,以便再次获得初始方程式?
您可以尝试以下方法:
def parse_obj(obj):
if isinstance(obj, dict):
items = []
for key, value in obj.items():
if key == 'mrow':
items.append(parse_obj(value))
elif key == 'msup':
mi = parse_obj(value['mi'])
mo = parse_obj(value['mn'])
items.append("{mi}^{mo}".format(mi=mi, mo=mo))
elif key in ['mi', 'mo', 'mn']:
items.append(parse_obj(value))
else:
raise NotImplementedError((key, value))
return " ".join(items)
elif isinstance(obj, list):
return " ".join(parse_obj(value) for value in obj)
else:
return obj # a string
具有以下json内容:
text = """\
{
"mrow": {
"mrow": {
"msup": {
"mi": "x",
"mn": "2"
},
"mo": [
"+",
"+"
],
"mrow": {
"mn": "4",
"mo": "*",
"mi": "x"
},
"mn": "4"
},
"mo": "=",
"mn": "0"
}
}"""
json_decoder = json.JSONDecoder(object_pairs_hook=collections.OrderedDict)
obj1 = json_decoder.decode(text)
print(parse_obj(obj1))
你得到:
x^2 + + 4 * x 4 = 0
我认为"mo": ["+", "+"]
存在问题"mo": ["+", "+"]
…
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.