如何使用 regex 和 defaultdict 创建带有列表的字典

字典如下


my = [{'Name':'Super', 'Gender':'Male', 'UNNO':111234},

      {'Name':'Spider', 'Gender':'Male', 'UNNO':11123},

      {'Name':'Bat', 'Gender':'Female', 'UNNO':113456},

     {'Name':'pand', 'Gender':'Female', 'UNNO':13456}]

唯一编号是每个字典的键“UNNO”的值。


所有 UNNO 编号必须包含 6 位数字。


UNNO 编号从 11 开始仅有效


预计出局


my_dict_list = {'Male':['Super'], 'Female':['Bat']}

没有正则表达式的原始代码


d = {}

for i in my:

    if str(i['UNNO']).startswith('11') and len(str(i['UNNO'])) == 6:

        # To get {'Male':['Super'], 'Female':['Bat']}

        d[i['Gender']] = [i['Name']]

如何借助regex写,写正则表达式,如何借助defaultdict完成


import re

from collections import defaultdict


# regular expression

rx = re.compile(r'^(?=\d{6}$)(?P<Male>11\d+)|(?P<Female>11\d+)')


# output dict

output = defaultdict(list)


茅侃侃
浏览 139回答 1
1回答

一只甜甜圈

要使用正则表达式匹配来解决您的问题 - 使用以下方法:import refrom collections import defaultdictmy_list = [{'Name': 'Super', 'Gender': 'Male', 'UNNO': 111234},&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{'Name': 'Spider', 'Gender': 'Male', 'UNNO': 11123},&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{'Name': 'Bat', 'Gender': 'Female', 'UNNO': 113456},&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{'Name': 'pand', 'Gender': 'Female', 'UNNO': 13456}]genders = defaultdict(list)pat = re.compile(r'^11\d{4}$')&nbsp; # crucial pattern to validate `UNNO` numberfor d in my_list:&nbsp; &nbsp; if pat.search(str(d['UNNO'])):&nbsp; &nbsp; &nbsp; &nbsp; genders[d['Gender']].append(d['Name'])print(dict(genders))&nbsp; &nbsp;# {'Male': ['Super'], 'Female': ['Bat']}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python