如何按字典的键a值过滤去重字典列表?
没问题,这是几个能帮你快速实现按a键去重的Python方案,每个a值仅保留一个条目:
方法1:利用字典键的唯一性(简洁高效)
Python字典的键是天然唯一的,我们可以用字典推导式把a的值作为键,对应的字典作为值,自动完成去重:
l = [ {'a': 123, 'b': 456}, {'a': 322, 'b': 44454}, {'a': 123, 'b': 134} ] # 保留每个a值对应的最后一个出现的字典 result = list({d['a']: d for d in l}.values()) print(result) # 输出:[{'a': 322, 'b': 44454}, {'a': 123, 'b': 134}]
如果想保留第一个出现的同a值字典,只需要先反转列表再处理,最后再反转回来:
result = list({d['a']: d for d in reversed(l)}.values())[::-1] print(result) # 输出:[{'a': 123, 'b': 456}, {'a': 322, 'b': 44454}]
方法2:循环+集合跟踪(直观可控)
这种方法更适合新手理解,用一个集合记录已经见过的a值,遍历列表时只保留未出现过的条目:
l = [ {'a': 123, 'b': 456}, {'a': 322, 'b': 44454}, {'a': 123, 'b': 134} ] seen_a = set() filtered_list = [] for item in l: current_a = item['a'] if current_a not in seen_a: seen_a.add(current_a) filtered_list.append(item) print(filtered_list) # 输出:[{'a': 123, 'b': 456}, {'a': 322, 'b': 44454}]
如果要保留最后出现的同a值条目,只需要倒序遍历列表,最后再把结果反转回来即可。
两种方法都能满足你的需求:字典推导式代码更短、执行效率高;循环方法逻辑更直观,方便你根据需要调整保留规则。
内容的提问来源于stack exchange,提问作者Usman Maqbool
相关产品推荐
相关产品推荐

