我试图比较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
答案 0 :(得分:1)
NameExists
中的语法似乎有误,你没有使用value
而best_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))