python - 从 parseAction 返回未更改的标记会生成双重嵌套字典
问题描述
将只返回标记的解析操作附加到解析器,解析器会在 ParseResults 列表中生成单个组,从而生成一个双重嵌套字典 (result3)。
我在pyparsing GitHub 问题页面上发布了这个问题,将其视为不一致。但也许不是,我只是不理解 ParseResults 对象。下面我稍微扩展了我的观察。
from __future__ import print_function
from pyparsing import *
name = Word(alphas)('name')
score = Word(nums + '.')('score')
nameScore = Group(name + score)
line1 = nameScore('Rider')
line2 = nameScore('Rider') + nameScore('Bull')
result1 = line1.parseString('Mauney 46.5')
result2 = line2.parseString('Mauney 46.5 Asteroid 46')
print("### before parse action is added ###")
print("result1.dump():\n" + result1.dump() + "\n")
print("result2.dump():\n" + result2.dump() + "\n")
line1.setParseAction(lambda t: t)
line2.setParseAction(lambda t: t)
result3 = line1.parseString('Mauney 46.5')
result4 = line2.parseString('Mauney 46.5 Asteroid 46')
print("### after parse action was added ###")
print("result3.dump():\n" + result3.dump() + "\n")
print("result4.dump():\n" + result4.dump() + "\n")
执行上述结果如下。
### before parse action is added ###
result1.dump():
[['Mauney', '46.5']]
- Rider: ['Mauney', '46.5']
- name: 'Mauney'
- score: '46.5'
result2.dump():
[['Mauney', '46.5'], ['Asteroid', '46']]
- Bull: ['Asteroid', '46']
- name: 'Asteroid'
- score: '46'
- Rider: ['Mauney', '46.5']
- name: 'Mauney'
- score: '46.5'
### after parse action was added ###
result3.dump():
[['Mauney', '46.5']]
- Rider: [['Mauney', '46.5']] <=================
- Rider: ['Mauney', '46.5']
- name: 'Mauney'
- score: '46.5'
result4.dump():
[['Mauney', '46.5'], ['Asteroid', '46']]
- Bull: ['Asteroid', '46']
- name: 'Asteroid'
- score: '46'
- Rider: ['Mauney', '46.5']
- name: 'Mauney'
- score: '46.5'
看起来最外面的 ParseResults 对象是它自己的字典的一部分。
这是预期的行为,如果是,为什么会发生?
一些进一步的观察。
如果 ParseResults 列表包含两个组,则没有双重嵌套 (result2)。
如果解析操作line1
更改为
line1.setParseAction(lambda t: [t[0]])
得到了想要的结果:
result1.dump():
[['Mauney', '46.5']]
- Rider: ['Mauney', '46.5']
- name: 'Mauney'
- score: '46.5'
解决方案
推荐阅读
- r - 更改 mahattan 图中暗示线的值
- reactjs - 在 ComponentDidMount() 之后找不到状态属性
- android - 异常绘制文本Android 4.4
- php - 带有 PHP 的 FCM 未在控制台中显示附加数据
- android - kotlin.TypeCastException: null 不能转换为非 null 类型 kotlin.collections.Map
- c# - c#在新图像中合并带有背景颜色的半透明图像
- ios - 无法摆脱致命异常:NSInternalInconsistencyException 错误
- visual-studio - 关于安装 Microsoft Visual Studio 2017
- android - bitmapFactoryOptions.outWidth 和 Height 返回 -1
- javascript - 模拟由 Redux Provider 组件封装的 React 组件函数