在遍历 XML 文件时创建子列表列表
Create a list of sublist while itiretating through XML file
我的问题如下:我不知道如何使用 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']}
我的问题如下:我不知道如何使用 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']}