我试图删除我的dict中的重复值,但它不起作用:
samples_antibiotics_with_duplicates = {'S00541-09': ['Streptomycin', 'Sulfamethoxazole', 'Trimethoprim', 'Spectinomycin', 'Streptomycin', 'Streptomycin', 'Trimethoprim']}
samples_antibiotics = {}
for key,value in samples_antibiotics_with_duplicates.iteritems():
if value not in samples_antibiotics.values():
samples_antibiotics[key] = value
print samples_antibiotics
打印:
{'S00541-09': ['Streptomycin', 'Sulfamethoxazole', 'Trimethoprim', 'Spectinomycin', 'Streptomycin', 'Streptomycin', 'Trimethoprim']}
任何帮助将不胜感激。
答案 0 :(得分:3)
下面的字典理解将从原始字典中创建一个没有任何重复值的新字典:
samples_antibiotics = {k: list(set(v)) for k, v in samples_antibiotics_with_duplicates.items()}
列表(或任何容器)的set
版本不包含任何重复项,因为集合不允许任何重复项(这就是为什么它们需要可散列项目的原因)。
正如@CoryKramer在评论中所说,这里给出的解决方案不会(一般来说)保留值列表中项目的顺序。如果这对你来说很重要,你就必须使用别的东西。
答案 1 :(得分:3)
如果您不关心保留原始订单,则set(my_list)
会删除所有重复订单。
如果您想保留原始订单,请list(OrderedDict.fromkeys(my_list))
答案 2 :(得分:3)
你可以试试这个:
samples_antibiotics_with_duplicates = {'S00541-09': ['Streptomycin', 'Sulfamethoxazole', 'Trimethoprim', 'Spectinomycin', 'Streptomycin', 'Streptomycin', 'Trimethoprim']}
new_dict = {a:list(set(b)) for a, b in samples_antibiotics_with_duplicatates.items()}
答案 3 :(得分:1)
如其他帖子所示,有更好的方法可以做到这一点。但是要尽可能多地保留原始代码,同时解释它为什么不起作用,而是使用它:
samples_antibiotics_with_duplicates = {'S00541-09': ['Streptomycin', 'Sulfamethoxazole', 'Trimethoprim', 'Spectinomycin', 'Streptomycin', 'Streptomycin', 'Trimethoprim']}
samples_antibiotics = {}
for key,value in samples_antibiotics_with_duplicates.items():
samples_antibiotics[key] = set(value)
print(samples_antibiotics)
问题是你在for循环中迭代字典中的每个键(所以只有' S00541-09')然后检查值是否在值中(显然它有成为)。我所做的基本上是迭代密钥本身的值。