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'}]
總結
以上是生活随笔為你收集整理的python中字典的find_python-re.findall返回命名捕获组的字典?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hdmi 屏幕旋转 树莓派_计算机实验室
- 下一篇: 时间排序python_算法导论 第八章