2013-12-12 126 views
1

我試圖比較Python中2個字典的值。我想知道一個字典中的值是否存在於另一個字典中的任何地方。這是我到目前爲止。如果存在,我想返回True,否則False。檢查字典值是否存在於Python中的另一個字典中

我有密碼,但不能正常工作。 我正在使用VS2012與Python插件

我將兩個字典項目傳入函數。

def NameExists(best_guess, line): 
    return all (line in best_guess.values() #Getting Generator Exit Error here on values 
     for value in line['full name']) 

另外,我想看看是否有重複內best_guess本身。

def CheckDuplicates(best_guess, line): 
    if len(set(best_guess.values())) != len(best_guess): 
     return True 
    else: 
     return False 

回答

1

由於誤差約爲發電機出口,我想你使用Python 3。 X。所以best_guess.values()是一個發電機,其排氣第一個value in line['full name']爲匹配不會被發現。

另外,我猜all的用法是不正確的,如果你尋找任何價值存在(不知道,從哪一個詞典雖然)。

您可以使用類似如下,提供line是第二詞典:

def NameExists(best_guess, line): 
    vals = set(best_guess.values()) 
    return bool(set(line.values()).intersection(vals)) 
+0

我收到一個屬性錯誤。 ['全名']是行字典中的一個值,我想查看這些值中的任何值是否與整個best_guess字典中的任何其他項匹配。 – Airborne

+0

@Airborne更新了您的評論信息 – alko

+0

這是工作很好,沒有錯誤:) – Airborne

1

NameExists的語法似乎是錯誤的,你是不是使用valuebest_guess.values()將返回一個迭代器,所以in只能使用一次,除非我們把它轉換到一個列表或一組(您正在使用Python 3.x,不是嗎?)。我相信這是你的意思:

def NameExists(best_guess, line): 
    vals = set(best_guess.values()) 
    return all(value in vals for value in line['full name']) 

而且CheckDuplicates功能可以在這樣短的方式編寫:

def CheckDuplicates(best_guess, line): 
    return len(set(best_guess.values())) != len(best_guess) 
+0

看來你忘了爲len個第一組'CheckDuplicates' – alko

+0

@alko你說得對。我修好了,謝謝! –

+0

是的,我正在使用Python 3.3。 – Airborne

相關問題