這個問題的靈感來自於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