【问题标题】:Check if Dictionary Values exist in a another Dictionary in Python检查字典值是否存在于 Python 中的另一个字典中
【发布时间】:2013-12-12 21:33:25
【问题描述】:

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

我的代码很接近,但不能正常工作。 我正在使用带有 Python 插件的 VS2012

我将两个字典项都传递到函数中。

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

【问题讨论】:

    标签: python dictionary


    【解决方案1】:

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

    另外,我猜all 的用法不正确,如果您寻找 any 值是否存在(不确定,但来自哪一个字典)。

    您可以使用如下内容,前提是 line 是第二个字典:

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

    【讨论】:

    • 我收到一个属性错误。 ['full name'] 是行字典中的一个值,我想看看这些值项中的任何一个是否与整个 best_guess 字典中的任何其他项匹配。
    【解决方案2】:

    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)
    

    【讨论】:

    • 看来你忘记了CheckDuplicates中的第一组len
    • 是的,我使用的是 Python 3.3。
    • @ÓscarLópez "in won't work" 不正确,in 用于生成器,但最终会消耗它
    • @alko,是的,由于某种原因仍在获取 GeneratorExit。
    • @Airborne line['full name'] 的性质不明确。请参阅我对这个方向的方法的回答
    猜你喜欢
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    相关资源
    最近更新 更多