繁体   English   中英

嵌套字典-获取值(Python)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM