如何在Python字典中移除重复值?问题排查与解决
问题分析与修正
原代码的错误点
- 变量名不匹配:你的字典实际叫
top_topics,但循环里用的是topic_keywords,如果未提前赋值会直接报错;就算赋值了,核心逻辑依然错误。 - 判断逻辑完全错误:你拿列表里的单个元素(比如
'football')去和字典的**值(列表类型,比如['football'])**做对比,字符串永远不可能等于列表,所以item not in topic_keywords.values()永远为False,根本不会往unique_dict里添加内容。如果unique_dict初始为空,最后topic_keywords会变成空字典;如果初始是原字典的拷贝,结果自然和原字典一致。 - 多余的嵌套循环:你的每个字典值都是单元素列表,循环
for item in value完全没必要,直接操作value即可。
修正方案
方案1:保留第一个['football'],移除后续重复条目
适用于想保留唯一的同值条目,去掉重复项:
top_topics = {0: ['soccer'], 1: ['football'], 2: ['hockey'], 3: ['basketball'], 4: ['football']} unique_dict = {} seen_values = set() # Python 3.7+字典默认有序,会保留插入顺序 for key, value in top_topics.items(): # 列表不可哈希,转成元组存入集合记录已出现的值 value_tuple = tuple(value) if value_tuple not in seen_values: seen_values.add(value_tuple) unique_dict[key] = value top_topics = unique_dict print(top_topics) # 输出:{0: ['soccer'], 1: ['football'], 2: ['hockey'], 3: ['basketball']}
方案2:直接移除所有值为['football']的条目
如果不需要保留任何['football']的条目,用字典推导式更简洁:
top_topics = {0: ['soccer'], 1: ['football'], 2: ['hockey'], 3: ['basketball'], 4: ['football']} top_topics = {k: v for k, v in top_topics.items() if v != ['football']} print(top_topics) # 输出:{0: ['soccer'], 2: ['hockey'], 3: ['basketball']}
内容的提问来源于stack exchange,提问作者FilipaF
相关产品推荐
相关产品推荐

