Python 3.x 如何使用python将xml标记转换为字典?

Python 3.x 如何使用python将xml标记转换为字典?,python-3.x,Python 3.x,我正在尝试使用python在字典中添加元素,保留键、值对。我的输入是xml,预期的输出应该是dictionary 输入:- <math> <elements> <function> <val>ADD</val> </function> <operator> <val>+</val>

我正在尝试使用python在字典中添加元素,保留键、值对。我的输入是xml,预期的输出应该是dictionary

输入:-

<math>
    <elements>
        <function>
           <val>ADD</val>
        </function>
        <operator>
           <val>+</val>
        </operator>
        <function>
           <val>SUB</val>
        </function>
        <operator>
           <val>-</val>
        </operator>
    </elements>
</math>
它应该返回字典,如下所示:-
[ADD:+,SUB:-]

假设XML的顺序总是正确的,您可以使用和:


@amrit我已经检查了上面的链接,但它并没有解决我要找的问题。我想要一个递归函数,用于两个孩子,一个是值,另一个是键。这是一个很好的答案,但是如果这个xml有另一个带有相同标记的标记,比如@那么这个答案可以很容易地修改。我在示例中使用XML进行了回答,得到了,谢谢。我想出了一个办法。
code till now:- 

from lxml import etree
from lxml.etree import _ElementTree, _Element, XMLParser
tree = etree.parsexml('math.xml')
root = tree.getroot()
mathdict = {}

for item in root.findall('./math/elements/function/'):
    for d in root.findall('./math/elements/operator/'):
        mathdict[item.text] = d.text
import xml.etree.ElementTree as ET


string = '''<math>
                <elements>
                    <function>
                       <val>ADD</val>
                    </function>
                    <operator>
                       <val>+</val>
                    </operator>
                    <function>
                       <val>SUB</val>
                    </function>
                    <operator>
                           <val>-</val>
                    </operator>
                </elements>
            </math>'''

root = ET.fromstring(string)

output = {}

functions, operators = root.iter('function'), root.iter('operator')

for function, operator in zip(functions, operators):
    output[function.find('val').text] = operator.find('val').text

print(output)
# {'ADD': '+', 'SUB': '-'}
output = {function.find('val').text: operator.find('val').text
          for function, operator in zip(functions, operators)}