如何在Python中基于邮箱与resultRole对字典列表去重?
解决方案
可以通过一个临时字典按邮箱分组,优先保留resultRole为multiplex的条目,最终提取字典值即可:
docResults = [ {'emailAddress':'user1@test.com','role':'writer','displayName':'USER1','type':'user','resultRole':'writer'}, {'emailAddress':'user2@test.com','role':'owner','displayName':'USER2','type':'user','resultRole':'owner'}, {'emailAddress':'user1@test.com','role':'writer','displayName':'USER1','type':'user','resultRole':'multiplex'}, {'emailAddress':'user2@test.com','role':'owner','displayName':'USER2','type':'user','resultRole':'owner'}, {'emailAddress':'user3@test.com','role':'commenter','displayName':'USER3','type':'user','resultRole':'multiplex'} ] email_group = {} for item in docResults: email = item['emailAddress'] # 邮箱未记录,或当前条目是multiplex时更新记录 if email not in email_group or item['resultRole'] == 'multiplex': email_group[email] = item # 转换为目标列表 permissionsUsers_list = list(email_group.values()) print(permissionsUsers_list)
逻辑说明
- 遍历原列表,用
emailAddress作为键,将条目存入email_group字典 - 处理每个条目时:
- 若邮箱未在字典中,直接添加
- 若邮箱已存在,检查当前条目是否为
multiplex,若是则替换字典中原有条目(确保multiplex条目优先级最高)
- 最后将字典的所有值转为列表,即为符合要求的去重结果
如果需要保留同一邮箱第一个非multiplex条目(而非最后一个),可以调整判断条件为:
if email not in email_group or (email_group[email]['resultRole'] != 'multiplex' and item['resultRole'] == 'multiplex'):
内容的提问来源于stack exchange,提问作者pickaxu
相关产品推荐
相关产品推荐

