2011-10-31 97 views
1

如果字典中有重复项,我需要编写一个返回true的函数。所以,如果有不止一次出现在字典中的东西,它将返回true。字典中的重复项(Python)

这是我的,但我很遥远,不知道该怎么做。

d = {"a", "b", "c"} 

def has_duplicates(d): 
    seen = set() 
    d={} 
    for x in d: 
     if x in seen: 
      return True 
     seen.add(x) 
    return False 

print has_duplicates(d) 
+0

你在寻找独特的键或值,因为@Raymond已经提到过,字典有唯一的键。 –

+2

此外,您的'd = {“a”,“b”,“c”}'是一个集合,而不是一个字典 –

+0

制作一组唯一值并查看它是否具有相同的长度。如果你想要更多的细节,我建议使用集合计数器http://docs.python.org/library/collections.html#collections.Counter –

回答

6

如果您正在寻找寻找在字典中的值复制:

def has_duplicates(d): 
    return len(d) != len(set(d.values())) 

print has_duplicates({'a': 1, 'b': 1, 'c': 2}) 

输出:

True 
+0

有没有办法只检查非空值重复? – ratata

1

Python字典已经有唯一的键。

您是否可能对独特的价值感兴趣?

set(d.values()) 

如果是这样,你可以检查集的长度,看它是否比值的数量较小。这是有效的,因为集合消除了来自输入的重复,所以如果结果小于输入,这意味着发现并消除了一些重复。

7
def has_duplicates(d): 
    return False 

词典不包含重复键,永远。你的函数btw。与这个定义是等价的,所以它是正确的(只是一点点)。

如果你想查找重复,这是

len(set(d.values())) != len(d) 

假设值是哈希的。

+0

对不适合问题的可爱答案。 –

+1

希望我可以给你另一个+1的重复值的聪明测试。 –

3

在您的代码中,d = {"a", "b", "c"}d是一个集合,而不是字典。

字典键和集都不能包含重复项。如果您正在寻找重复,检查组值的大小与字典本身一样:

def has_duplicate_values(d): 
    return len(set(d.values())) != len(d) 
0

这不是一本字典,是一家集:

d = {"a", "b", "c"} 

我不知道你想要完成什么,但你不能拥有同一个键的字典。如果您有:

>>> d = {'a': 0, 'b':1} 
>>> d['a'] = 2 
>>> print d 
{'a': 2, 'b': 1} 
0

不仅是你的一般命题字典可以有重复键假的,但也是你的实现是有缺陷的严重:d={}意味着你失去了你的视线输入d arg的和正在处理的空白dictiona RY!

0

字典唯一可以重复的是值。字典是密钥唯一的密钥存储区。在Python中,你可以创建一个字典,像这样:

d1 = {k1: v1, k2: v2, k3: v1} 
d2 = [k1, v1, k2, v2, k3, v1] 

d1是使用通常的字典方式创建。d2由具有偶数个元素的list创建。请注意,两个版本都有重复的值。

如果你有一个返回字典中的唯一值的数量,那么你可以说类似的功能:

len(d1) != func(d1) 

幸运的是,Python中可以很容易地使用sets做到这一点。仅仅将d1转换为set是不够的。让我们的键和值真实,以便您可以运行一些代码。

v1 = 1; v2 = 2 
k1 = "a"; k2 = "b"; k3 = "c" 
d1 = {k1: v1, k2: v2, k3: v1} 
print len(d1) 
s = set(d1) 
print s 

你会发现,s有三个成员太多,看起来像set(['c', 'b', 'a'])。这是因为一个简单的转换只能使用字典中的键。你想使用像这样的值:

s = set(d1.values()) 
print s 

正如你所看到的,只有两个元素,因为值1出现两次。查看一个集合的一种方式是它是一个没有重复元素的列表。这就是打印机在将一组打印出来作为括号内容时所看到的内容。另一种看待它的方式是没有价值的词典。与许多数据处理活动一样,您需要以selecting开始您感兴趣的数据,然后对其进行处理。首先选择字典中的值,然后创建一个集合,然后进行计数和比较。