我怎样才能在皮帕辛中扁平化一个字典



Pyparsing允许命名的词法分析器组件(或出于相同目的使用setResultsName(,这些组件在解析后可以用作属性或字典条目。

这允许大多数解析组件的漂亮平面视图...除非需要以特定方式替换匹配的令牌。

就我而言,我想转换和复制它们。所以我创建了一个这样的函数:

def process_comments(_1,_2,token):
urls = []
comments = []
#...transform here...
return {"list":comments, "urls":urls}
comments = ZeroOrMore(Suppress(Keyword("comment")) + quotes.copy()).setParseAction(process_comments)
comments.setResultsName("comments")

这有效,但会导致不必要的地图深度(并且随着嵌套替换而变得更糟(。我更希望能够在结果的顶层创建两个条目,"评论"和"url",并将原始令牌留给空白。

这能做到吗?请记住,转换不是原始输入的一部分,只是原始标记,因此这需要解析后的修改,或者必须在语法上做一些奇怪的事情。

如果有一种方法可以添加一个Empty令牌,我可以使用 setParseAction 自定义该令牌以获取最后一个匹配的令牌(不为空(,那将是很酷的,但没有对吗?

事实证明,为了扁平化这一点,我只需添加以将我的"setParserAction"添加到注释语法的父级。它在自己解析子项后拥有所有信息,并且可以替换自身,从而"扁平化"或复制或转换子项。

最新更新