Python 在pyparsing中获取与asXML()等效的数据结构?

Python 在pyparsing中获取与asXML()等效的数据结构?,python,pyparsing,Python,Pyparsing,我了解到,在pyparsing中,您可以通过以下操作命名元素/组/节点: token=pyparsing.Literal(“Foobar”)(“这里的元素名”) 因此,我制作了一个示例程序来测试它: 将pyparsing导入为pp 前缀=pp.Word(pp.nums)(“前缀”) Name=pp.Literal(“FOOBAR”)(“Name”) 修饰语=pp.Word(pp.alphas)(“修饰语”) 修饰语组=pp.Group(pp.OneOrMore(修饰语))(“修饰语组”) 句子

我了解到,在pyparsing中,您可以通过以下操作命名元素/组/节点:

token=pyparsing.Literal(“Foobar”)(“这里的元素名”)
因此,我制作了一个示例程序来测试它:

将pyparsing导入为pp
前缀=pp.Word(pp.nums)(“前缀”)
Name=pp.Literal(“FOOBAR”)(“Name”)
修饰语=pp.Word(pp.alphas)(“修饰语”)
修饰语组=pp.Group(pp.OneOrMore(修饰语))(“修饰语组”)
句子=pp.Group(pp.Optional(前缀)+名称+修饰语组)(“句子”)
out=句子.parseString(“123 FOOBAR testA testB”)
然后,我尝试使用这些命名标记获取输出

我试过这个:

>>打印输出
[['123','FOOBAR',['testA','testB']]
…但这并不能让我知道象征性的名字

然后我试着做了以下几点:

>print out.items()
[('station',('123','FOOBAR',('testA','testB'],{'Modifier':[('testA',0),
('testB',1]}],{'Modifier_Group':[('testA','testB'],{'Modifier':[('testA',0),
('testB',1]}),2],'Prefix':[('123',0)],'Name':[('FOOBAR',1]}]
>>>打印口述(输出)
{'station':(['123','FOOBAR',(['testA','testB']),{'Modifier':[('testA',0),
('testB',1]}],{'Modifier_Group':[('testA','testB'],{'Modifier':[('testA',0),
('testB',1]}),2],'Prefix':[('123',0)],'Name':[('FOOBAR',1]}
>>>导入集合
>>>打印收藏。订购信息(输出)
OrderedDict([('句子',(['123','FOOBAR',(['testA','testB']),{'Modifier':[
('testA',0),('testB',1)],{'Modifier_Group':[(('testA','testB'],
{'Modifier':[('testA',0),('testB',1)]},2)],'Prefix':[('123',0)],
“名称”:[('FOOBAR',1)]}])
…但是它们包含了一个特殊的dict、list和tuple的混合体,我不知道如何解析它们。然后,我试着这样做:

>print out.asXML()
123
福巴
种皮
测试B
…这正是我想要的,只是它是XML格式的,而不是我可以轻松操作的python数据结构。有没有办法获得这样的数据结构(而不必解析XML)


我确实找到了一个返回a的解决方案,但python中的dict是无序的(我希望标记按顺序排列),因此它不是我的解决方案。

Pyparsing返回一个已经提供了该结构的ParseResults对象。您可以通过打印
out.dump()
来可视化您的句子结构:

您可以像访问dict中的键一样访问这些元素:

>>> print out.Sentence.keys()
['Modifier_Group', 'Prefix', 'Name']
>>> print out.Sentence['Prefix']
123
或作为对象上的属性:

>>> print out.Sentence.Name
FOOBAR
>>> print out.Sentence.Prefix
123
>>> print out.Sentence.Name
FOOBAR
>>> print out.Sentence.Prefix
123