python - 按优先级根据键值从列表中删除重复字典
问题描述
假设我有以下类型的字典列表:
iterlist = [
{"Name": "Mike", "Type": "Admin"},
{"Name": "Mike", "Type": "Writer"},
{"Name": "Mike", "Type": "Reader"},
{"Name": "Zeke", "Type": "Writer"},
{"Name": "Zeke", "Type": "Reader"}
]
我想按以下优先级(Admin > Writer > Reader)根据“类型”删除重复的“名称”,所以最终结果应该是:
iterlist = [
{"Name": "Mike", "Type": "Admin"},
{"Name": "Zeke", "Type": "Writer"}
]
我发现了一个类似的问题,但它删除了一种显式键值类型的重复项:链接
有人可以指导我如何继续前进吗?
解决方案
这是@azro建议的解决方案的修改形式,他们的解决方案和其他解决方案没有考虑到您提到的优先级,您可以使用以下代码克服它。有一个优先级的字典。
iterlist = [
{"Name": "Mike", "Type": "Writer"},
{"Name": "Mike", "Type": "Reader"},
{"Name": "Mike", "Type": "Admin"},
{"Name": "Zeke", "Type": "Reader"},
{"Name": "Zeke", "Type": "Writer"}
]
# this is used to get the priority
priorites = {i:idx for idx, i in enumerate(['Admin', 'Writer', 'Reader'])}
sort_key = lambda x:(x['Name'], priorites[x['Type']])
groupby_key = lambda x:x['Name']
result = [next(i[1]) for i in groupby(sorted(iterlist, key=sort_key), key=groupby_key)]
print(result)
输出
[{'Name': 'Mike', 'Type': 'Admin'}, {'Name': 'Zeke', 'Type': 'Writer'}]
推荐阅读
- c# - 如何使用 Break Line 和 FormatString.Alignment 修复此间隔字符串方法
- eclipse - 如何将 WebContent 文件夹添加到 Eclipse 项目
- ios - GetFileAsync 无法从基于 iOS 的 Unity 存储中下载
- r - 在 dplyr 中实现过滤数据的更好方法
- jq - 如何对 jq 的输出中的所有数字求和
- javascript - 解压文件并上传到 S3
- express - Express MongoDB 变量未定义
- javascript - 对象操作以形成新对象
- sql - postgresql:选择语句中可迭代的数据类型
- android - Intellij 中 Android 单元测试期间的日志给出 java.lang.RuntimeException: Stub