簡體   English   中英

解析構造三個等長列表 python 3.6

[英]parsing and constructing three lists of equal length python 3.6

我正在嘗試解析 xml 塊,如下所示:

<table>
     <table>
      <elem key="val1">abc</elem>
      <elem key="val2">xyz</elem>
     </table>
   <table>
      <elem key="val2">def</elem>
      <elem key="val3">pqr</elem>
   </table>
    <table>
      <elem key="val1">ghi</elem>
      <elem key="val3">tuv</elem>
   </table>
 </table>

現在,我編寫了以下代碼片段來解析它並捕獲值:

                        for elem in item:
                            if elem.attrib["key"] == "val1":
                                l1.append(elem.text)

                            elif elem.attrib["key"] == "val2":
                                l2.append(elem.text)

                            elif elem.attrib["key"] == "val3":
                                l3.append(elem.text)

我想要的是這三個長度相等的列表,如下所示:

  l1 = ['abc', '', 'ghi']
  l2 = ['xyz', 'def', '']
  l3 = ['', 'pqr', 'tuv']

我沒有關於如何做到這一點的任何線索。

這是一個可能有效的解決方案。 它首先將表值收集到字典中,例如{'val1': 'abc', 'val2': 'xyz', 'val3': ''} from dict.fromkeys() ,它將為值初始化''沒有找到。 然后我們可以通過對 values 進行嵌套列表理解來獲取這些values

演示:

import xml.etree.ElementTree as ET

xml = """
  <table>
    <table>
      <elem key="val1">abc</elem>
      <elem key="val2">xyz</elem>
    </table>
    <table>
      <elem key="val2">def</elem>
      <elem key="val3">pqr</elem>
    </table>
    <table>
      <elem key="val1">ghi</elem>
      <elem key="val3">tuv</elem>
    </table>
  </table>"""

root = ET.fromstring(xml)

values = ("val1", "val2", "val3")

tables = []
for child in root:
    table = dict.fromkeys(values, '')

    for item in child:
        value = item.attrib["key"]
        table[value] = item.text

   tables.append(table)

print([[table[val] for table in tables] for val in values])

Output:

[['abc', '', 'ghi'], ['xyz', 'def', ''], ['', 'pqr', 'tuv']]

然后我們可以將結果解壓縮為三個列表l1l2l3

result = [[table[val] for table in tables] for val in values]

l1, l2, l3 = result

print(l1)
# ['abc', '', 'ghi']

print(l2)
# ['xyz', 'def', '']

print(l3)
# ['', 'pqr', 'tuv']

試試這個模塊:

https://docs.python.org/3/library/xml.etree.elementtree.html

我發現它在嘗試解析 xml 時非常有用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM