如何解决在通过 XML 文件 itiretating 时创建子列表列表
我的问题如下:我不知道如何使用 lxml 库从 xml 文件创建不同变量的字典。
以下是 xml 文件的示例:
<Patterns>
<Pattern ID="0" weight="1">
<PatternEntries>
<PatternEntry index="0">
<ShiftType>L</ShiftType>
</PatternEntry>
<PatternEntry index="1">
<ShiftType>D</ShiftType>
</PatternEntry>
</PatternEntries>
</Pattern>
<Pattern ID="1" weight="1">
<PatternEntries>
<PatternEntry index="0">
<ShiftType>D</ShiftType>
</PatternEntry>
<PatternEntry index="1">
<ShiftType>E</ShiftType>
</PatternEntry>
</PatternEntries>
</Pattern>
我想要创建一个字典,以模式 ID 作为键,班次类型和日期作为值,看起来像这样:{Pattern ID :[ShiftType]}。问题来自轮班列表。所以我在想它创建一个子列表,其中每个 ID 的每个元素都存储在一个子列表中,所有 ID 的所有元素都存储在一个通用列表中。谢谢 !这是我的代码
for ID in root.xpath('//Patterns'):
pattern_ID = ID.xpath('./Pattern/@ID')
for shift in root.xpath('.//PatternEntries/PatternEntry/ShiftType'):
shift_list.append(shift.text)
预期输出:
{0:[L,D],1:[D,E]}
解决方法
您可能需要一些类似的东西:
from lxml import etree
patterns = """[your xml above,fixed - it's missing the closing </Patterns>]"""
doc = etree.fromstring(patterns)
p_dict = {}
pat = doc.xpath('//Pattern')
for p in pat:
key = p.xpath('./@ID')[0]
vals = p.xpath('.//ShiftType/text()')
p_dict[key]=vals
p_dict
输出:
{'0': ['L','D'],'1': ['D','E']}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。