检查字典值是否存在于Python中的另一个字典中

时间:2013-12-12 21:33:26

标签: python dictionary

我试图比较Python中2个字典的值。我想知道一个字典中的值是否存在于另一个字典中的任何位置。这是我到目前为止所拥有的。如果它存在,我想返回True,否则返回False。

我的代码很接近,但工作不正常。 我正在使用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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

由于错误是关于生成器退出,我猜你使用python 3.x.所以best_guess.values()是一个生成器,它会为找不到匹配项的第一个value in line['full name']耗尽。

此外,如果您查找任何值,我猜all的使用率是不正确的(不确定,但是从哪一个dictinary)。

您可以使用以下内容,提供line是第二个词典:

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