2013-12-12 128 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

相关问题