我搜索过以前的帖子,并没有找到一个人在问我正在做的事情:
我试图查看两个单独的词典并找到键相同的实例,但值不同。字典不大小相同。当我找到具有不同值的匹配键时,我想只将键添加到列表中,因为我将不再需要这些值。
现在我正在这样做。这是非常低效的,但对于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。
答案 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]]