如何在Python字典中比较值并去除重复元素,确保元素唯一?
问题:去除字典列表值中的重复元素,确保每个元素仅出现一次
我有如下Python字典:
my_dict = {'alpha1': ['a', 'b', 'c', 'd', 'e', 'f'], 'alpha2': ['e', 'f', 'g'], 'alpha3': ['j', 'k', 'l', 'm'], 'alpha4': ['h', 'i', 'j', 'k']}
我需要让字典里的每个元素只出现一次,处理后得到这样的结果:
{'alpha1': ['a', 'b', 'c', 'd', 'e', 'f'], 'alpha2': ['g'], 'alpha3': ['j', 'k', 'l', 'm'], 'alpha4': ['h', 'i']}
我试了这段代码:
result = {} for key, value in dict.items(): if value not in result.values(): result[key] = value print(result)
但输出还是原来的字典,求帮忙解决。
为啥你的代码没用?
你现在的逻辑是判断整个列表有没有在结果里出现过,但原字典里每个列表都是不一样的对象,所以这个判断永远为真,自然所有列表都被原样保留了。你要检查的是列表里的单个元素有没有重复,不是整个列表。
正确的写法
我们需要用一个集合来记录已经见过的元素,遍历每个键对应的列表时,只留下没见过的元素,同时把新元素加到集合里。代码如下:
my_dict = {'alpha1': ['a', 'b', 'c', 'd', 'e', 'f'], 'alpha2': ['e', 'f', 'g'], 'alpha3': ['j', 'k', 'l', 'm'], 'alpha4': ['h', 'i', 'j', 'k']} seen = set() # 用来存已经出现过的元素 result = {} for key, values in my_dict.items(): unique_list = [] for item in values: if item not in seen: unique_list.append(item) seen.add(item) result[key] = unique_list print(result)
运行后就能得到你想要的结果:
{'alpha1': ['a', 'b', 'c', 'd', 'e', 'f'], 'alpha2': ['g'], 'alpha3': ['j', 'k', 'l', 'm'], 'alpha4': ['h', 'i']}
小说明
- 用集合
seen是因为查元素有没有在集合里比在列表里快很多,效率更高。 - 这里是按原字典的顺序处理的,所以先出现的列表会保留所有元素,后面的列表只留没出现过的,刚好符合你的需求。
内容的提问来源于stack exchange,提问作者nk2023
相关产品推荐
相关产品推荐

