2011-10-31 65 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開始您感興趣的數據,然後對其進行處理。首先選擇字典中的值,然後創建一個集合,然後進行計數和比較。