Python如何在字典中查找重复值

4

好的,我想知道如何在字典中找到单个键的重复值。

所以我有:

import collections
s = [('yellow', 1), ('blue', 2), ('yellow', 1), ('blue', 4), ('red', 1)]
d = collections.defaultdict(list)
for k, v in s:
    d[k].append(v)

输出:

defaultdict(<class 'list'>, {'blue': [2, 4], 'yellow': [1, 1], 'red': [1]})

正如您所看到的,“Yellow”有重复值。

我想知道,在字典的一个键中查找是否有重复值的最佳Python方式。并在找到它们后,从字典中删除它们。

1个回答

4

在追加之前可以进行检查:

d = collections.defaultdict(list)
for k, v in s:
    if v not in d[k]: # if value not in list already
        d[k].append(v)

或者使用集合来存储值:

d = collections.defaultdict(set)
for k, v in s:
    d[k].add(v) # sets don't have duplicates so we don't need a check here

如果你不想要defaultdict(<class 'list'>的输出,可以通过dict(d)将d转换为普通字典,或者使用一个普通字典并使用dict.setdefault

d = {}
for k, v in s:
    d.setdefault(k,set())
    d[k].add(v)

还有一个问题,可能有点离题...但是你知道我怎么才能从输出中摆脱:defaultdict(<class 'list'>,...)吗? - Andre
你可以将它转换为普通字典 dict(d),或者一开始就使用普通字典并使用 setdefault - Padraic Cunningham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接