[英]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']]
然后我們可以將結果解壓縮為三個列表l1
、 l2
和l3
:
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']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.