这个问题的灵感来自于这个问题。我想从一个字典列表中获取一个字典,该字典应包含所有仅出现一次的字典的键/值对,或者所有字典都同意相关联的值。例如(取自上述帖子):
应该产生。
所以我的问题是:这个能更加优雅地完成吗? < p >< em > 附带问题:是否可以在不修改基础字典的情况下更好地完成< code > next(iter(b)) (即不使用< code > b.pop() )?
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}
所以我的问题是:这个能更加优雅地完成吗? < p >< em > 附带问题:是否可以在不修改基础字典的情况下更好地完成< code > next(iter(b)) (即不使用< code > b.pop() )?
b.pop()
是可以的,因为它只修改了您的新临时集合。没有其他方法可以从集合中获取单个项。因为集合没有顺序,也没有myset[0]
。 - Jochen Ritzel