我使用SQLAlchemy创建了查询。此查询生成器返回具有规则列表的4个对象。每条规则都是:; n1
n1t resb 1
n1o resb 1
; n2
n2t resb 1
n2o resb 1
; n3
n3t resb 1
n3o resb 1
; a1
a1t resb 1
a1o resb 1
; reflects the average
; s1
s1w resw 1
; sum of n1 n2 n3
。我想获得一个只包含唯一dict的可迭代元素。
我尝试使用set():
{'type': u'psome_type', 'options': {}, 'weight': 1.0}
但是当我们传递给set.update字典时,它只通过密钥更新,但我想通过所有字典进行更新。
我该怎么做?
答案 0 :(得分:1)
您的循环将不同词典的所有键添加到set
。相反,如果您执行rules.update(d.items())
,则会获得所有项目的set
,并且可以使用其中的所有条目重新创建一个dict
(假设没有重复的键具有不同的值),但这似乎不是你想要的。
>>> lst = [{"foo": 42, "bar": 23}, {"foo": 3.14}, {"bar": 23, "foo": 42}]
>>> s = set()
>>> for d in lst:
... s.update(d.items())
...
>>> dict(s)
{'foo': 3.14, 'bar': 23}
注意"foo": 42
条目是如何消失的。相反,您可以从字典中创建可清除的frozenset
'项目,收集set
中的项目,并从这些项目中创建新的唯一词典:
>>> lst = [{"foo": 42, "bar": 23}, {"foo": 3.14}, {"bar": 23, "foo": 42}]
>>> [dict(x) for x in set(frozenset(d.items()) for d in lst)]
[{'foo': 3.14}, {'foo': 42, 'bar': 23}]