python中字典的find_python-re.findall返回命名捕获组的字典?

没有内置方法可以执行此操作,但是可以通过使用列表推导来达到预期的结果。

[dict([[k, i if isinstance(i, str) else i[v-1]] for k,v in pat.groupindex.items()]) for i in pat.findall(text)]

格式友好:

>>> [

... dict([

... [k, i if isinstance(i, str) else i[v-1]]

... for k,v in pat.groupindex.items()

... ])

... for i in pat.findall(text)

... ]

我们使用列表推导构建一个列表,遍历来自groupindex的结果,该结果要么是字符串列表,要么是元组列表(0或1个捕获组会生成dict)。

对于结果中的每一项,我们从另一个列表理解中构造一个groupindex,该列表理解是从已编译模式的dict字段生成的,如下所示:

>>> pat.groupindex

{'name2': 2, 'name': 1}

为groupindex中的每个项目构造一个列表,如果dict中的项目是一个元组,则使用groupindex中的组号来查找正确的项目,否则将该项目分配给(仅现存的)命名组。

[k, i if isinstance(i, str) else i[v-1]]

最后,从字符串列表的列表中构建字典。

请注意,2933302076859409408仅包含命名组,因此在生成的dict中将省略未命名的捕获组。

结果:

[dict([[k, i if isinstance(i, str) else i[v-1]] for k,v in pat.groupindex.items()]) for i in pat.findall(text)]

[{'name2': 'sue', 'name': 'bob'}, {'name2': 'richard', 'name': 'jon'}]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值