比较Python中两个不同字典的值?

时间:2013-04-09 03:06:20

标签: python

我搜索过以前的帖子,并没有找到一个人在问我正在做的事情:

我试图查看两个单独的词典并找到键相同的实例,但值不同。字典大小相同。当我找到具有不同值的匹配键时,我想只将键添加到列表中,因为我将不再需要这些值。

现在我正在这样做。这是非常低效的,但对于200-ish项目是可以的。我有一些超过200,000项的词典,这就是这成为一个主要问题:

    for sourceKey, sourceValue in sourceDict.iteritems():
         for targetKey, targetValue in targetDict.iteritems():
              if targetKey == sourceKey:
                   if targetValue != sourceValue:
                        diffList.append(sourceKey)

有没有办法做到这一点?我使用的是Python 2.6。

3 个答案:

答案 0 :(得分:3)

for key in set(sourceDict).intersection(targetDict):
    # Now we have only keys that occur in both dicts
    if sourceDict[key] != targetDict[key]:
        diffList.append(key)

正如DSM在他(现已删除)的回答中所说,你可以用列表理解或生成器来做到这一点:

(k for k in set(sourceDict).intersection(targetDict) if sourceDict[key] != targetDict[key])

答案 1 :(得分:0)

[k for k in source_dict if target_dict.get(k, object()) != source_dict[k]]

答案 2 :(得分:0)

1-liner:[key for key in set(sourceDict).intersection(targetDict) if sourceDict[key] != targetDict[key]]