这个问题的灵感来自于this question。我希望从字典列表中获取字典,该字典应包含所有仅包含一次的字典或所有字典在关联值上达成一致的字典中的所有键/值对。示例(从上述发布拍摄):从词典列表中创建一个不相矛盾的词典
dicts = [dict(a=3, b=89, d=2), dict(a=3, b=89, c=99), dict(a=3, b=42, c=33)]
print dict_itersection(dicts)
应该产生
{'a': 3, 'd': 2}
我当前的实现看起来是这样的:
import collections
def dict_intersection(dicts):
c=collections.defaultdict(set)
for d in dicts:
for a, b in d.iteritems():
c[a].add(b)
return {a: next(iter(b)) for a, b in c.iteritems() if len(b) == 1}
所以我的问题:可以这样做更优雅?
Sidequestion:可以next(iter(b))
而不底层字典(即,不b.pop()
)的变形例进行更好?
它只需要两条评论。 'b.pop()'在这里没问题,因为它只会修改你的新的临时集合。没有其他方法可以从一组中获取单个项目。因为集合没有顺序,因此没有'myset [0]' – 2012-03-28 14:15:11