python中字典的find_python-re.findall返回命名捕获组的字典?
沒有內(nèi)置方法可以執(zhí)行此操作,但是可以通過使用列表推導(dǎo)來達(dá)到預(yù)期的結(jié)果。
[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)
... ]
我們使用列表推導(dǎo)構(gòu)建一個(gè)列表,遍歷來自groupindex的結(jié)果,該結(jié)果要么是字符串列表,要么是元組列表(0或1個(gè)捕獲組會(huì)生成dict)。
對(duì)于結(jié)果中的每一項(xiàng),我們從另一個(gè)列表理解中構(gòu)造一個(gè)groupindex,該列表理解是從已編譯模式的dict字段生成的,如下所示:
>>> pat.groupindex
{'name2': 2, 'name': 1}
為groupindex中的每個(gè)項(xiàng)目構(gòu)造一個(gè)列表,如果dict中的項(xiàng)目是一個(gè)元組,則使用groupindex中的組號(hào)來查找正確的項(xiàng)目,否則將該項(xiàng)目分配給(僅現(xiàn)存的)命名組。
[k, i if isinstance(i, str) else i[v-1]]
最后,從字符串列表的列表中構(gòu)建字典。
請(qǐng)注意,2933302076859409408僅包含命名組,因此在生成的dict中將省略未命名的捕獲組。
結(jié)果:
[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'}]
總結(jié)
以上是生活随笔為你收集整理的python中字典的find_python-re.findall返回命名捕获组的字典?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hdmi 屏幕旋转 树莓派_计算机实验室
- 下一篇: 时间排序python_算法导论 第八章