4

我有两个字典,一旦它们都被构建,键(和值)中有一些重叠我想从其中一个中删除键,另一个中存在的值。基于这个问题和亚历克斯马泰利的回答我试过

from collections import defaultdict

some_dictionary  # a defaultdict(list)
other_dictionary # a defaultdict(list) has some duplicate k,v pairs

other_dictionary = defaultdict((key,other_dictionary[key]) for key in other_dictionary if key not in some_dictionary)

当我这样做时,我得到一个错误

TypeError: first argument must be callable
4

2 回答 2

4

尝试这个:

other_dictionary = defaultdict(list, ((k, v) for k, v in other_dictionary.iteritems() if k not in some_dictionary))

请注意,adefaultdict必须接收可调用对象作为其第一个参数,以确定默认值是什么。在您的代码中,list缺少该参数。

除此之外,您的算法基本上是正确的 - 但可以使用 更简洁地编写它iteritems(),如上所示。

于 2013-07-26T15:45:29.197 回答
0

使用迭代项

other_dictionary = defaultdict(list, ((key,values) for key, values in other_dictionary.iteritems() if key not in some_dictionary))
于 2013-07-26T15:46:29.090 回答