提问人:Avila 提问时间:11/7/2023 最后编辑:mkrieger1Avila 更新时间:11/8/2023 访问量:87
使用 elementtree 列出比较 “==” 与 “in”
List comparison "==" vs "in" with elementtree
问:
我有一个正在解析的 XML,两个元素具有相同的名称,但需要两个选项中每个选项的唯一值。我能够让代码按照我想要的方式运行,但是我不确定为什么一种方法有效 () 而另一种方法不起作用 ()。in
==
XML 代码段:
<metaMetadata>
<metadataSchema>Value1</metadataSchema>
<metadataSchema>Value2</metadataSchema>
</metaMetadata>
法典:
schema_val = ['Value1', 'Value2']
for ele in root.findall(".//{*}metaMetadata"):
m_schema = ele.findall("lom:metadataSchema",ns)
m_schema_check = [i for i in schema_val if i in m_schema[0].text]
if m_schema_check:
for i in m_schema_check:
schema_val.remove(i)
if m_schema[1].text in schema_val:
print('pass')
这符合我的意愿,但我试图理解为什么它只在我拥有 时才有效,而当我拥有代码不起作用并跳过 .in
==
print
答:
0赞
Hermann12
11/8/2023
#1
编辑:是否要将 xml 列表值与架构值列表进行比较?如果列表元素的顺序无关紧要,则可以在比较之前查看列表:sort()
import xml.etree.ElementTree as ET
xml_str = """<metaMetadata>
<metadataSchema>Value1</metadataSchema>
<metadataSchema>Value2</metadataSchema>
</metaMetadata>"""
tree = ET.fromstring(xml_str)
l = [c.text for c in tree.findall('.//metadataSchema')]
schema_val = ['Value2', 'Value1']
if l.sort() == schema_val.sort():
print('true')
else:
print('false')
输出:true
评论
0赞
Avila
11/8/2023
感谢您的回复:)这有点接近我正在寻找的东西。最大的问题是 和 是必需的,但它们可以出现在任何一个标签中。所以可以先出现。Value1
Value2
<metadataSchema>
Value2
0赞
Hermann12
11/8/2023
@Avila,在比较列表之前,您可以对列表进行排序。我编辑了我的答案。
评论
in
测试成员资格,测试平等性。它们是不同的,因此只有其中一个有效也就不足为奇了。==
in
[i for i in schema_val if i in m_schema[0].text]
if m_schema[1].text in schema_val:
if
m_schema[1].text
schema_val