为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

茅侃侃 2022-06-22 17:18:00
字典如下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 refrom collections import defaultdict# regular expressionrx = re.compile(r'^(?=\d{6}$)(?P<Male>11\d+)|(?P<Female>11\d+)')# output dictoutput = defaultdict(list)
查看完整描述

1 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

要使用正则表达式匹配来解决您的问题 - 使用以下方法:


import re

from collections import defaultdict


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

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

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

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


genders = defaultdict(list)

pat = re.compile(r'^11\d{4}$')  # crucial pattern to validate `UNNO` number


for d in my_list:

    if pat.search(str(d['UNNO'])):

        genders[d['Gender']].append(d['Name'])


print(dict(genders))   # {'Male': ['Super'], 'Female': ['Bat']}


查看完整回答
反对 回复 2022-06-22
  • 1 回答
  • 0 关注
  • 138 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号