Python字典如何保留元素首次出现并删除后续所有重复值
解决思路
你原来的代码逻辑和需求不匹配:你当前是判断完整列表是否已存在于结果的值中,而需求是跟踪所有单个元素的出现记录,仅保留元素第一次出现的实例,后续重复出现全部剔除。
你可以用一个集合来存储已经出现过的元素,遍历字典时对每个列表做过滤即可,Python 3.7+ 版本默认保留字典的插入顺序,可直接按原字典顺序遍历,代码实现如下:
d1 = {'test': ['1', '2', '3'], 'cool': ['7', '1'], 'idk': ['3', '2', '7', '1'], 'idc': ['8'], 'hm': ['1', '4', '5']} result = {} # 用来记录已经出现过的元素,集合查找效率远高于列表 seen_elements = set() for key, original_list in d1.items(): # 筛选出当前列表中从未出现过的元素 filtered_list = [item for item in original_list if item not in seen_elements] # 把本次新出现的元素加入全局已出现集合 seen_elements.update(filtered_list) # 筛选结果为空时替换为[''],符合你给出的输出要求 result[key] = filtered_list if filtered_list else [''] print(result)
运行上述代码得到的输出和你预期完全一致:
{'test': ['1', '2', '3'], 'cool': ['7'], 'idk': [''], 'idc': ['8'], 'hm': ['4', '5']}
内容的提问来源于stack exchange,提问作者Jayson
相关产品推荐
相关产品推荐

