3 回答

TA貢獻1725條經(jīng)驗 獲得超8個贊
假設(shè)你的字典是m你可以使用set這樣的:
s = set()
m = {'a': [1,2,3], 'b': [2,3,4,5,6]}
for v in m.values():
t_set = set(v)
s.update(t_set)
s
{1, 2, 3, 4, 5, 6}
我看到你說你的對象不可散列。如果它們是您創(chuàng)建的對象,您可以覆蓋該__hash__()函數(shù)并定義您自己的方式以使它們可散列。

TA貢獻1824條經(jīng)驗 獲得超8個贊
您可以使用itertools.chain它對所有值創(chuàng)建迭代器。然后是一個簡單的技巧,使用dict.fromkeys而不是集合來保留順序,同時僅保留唯一值。(請記住,對象必須是可索引/可散列的)您將需要弄清楚這些對象如何進行比較才能完成此任務(wù)。
from itertools import chain
data = {"A": [obj1, obj2, obj3], "B": [obj1, obj4, obj5]}
output = list(dict.fromkeys(chain(*data.values())))
[obj1, obj2, obj3, obj4, obj5]

TA貢獻1898條經(jīng)驗 獲得超8個贊
以下作品。
def get_unique_objs(data):
? ? ret = []
? ? for obj_list in data.values():
? ? ? ? for obj in obj_list:
? ? ? ? ? ? if obj not in ret:
? ? ? ? ? ? ? ? ret.append(obj)
? ? return ret
這將返回一個列表,其中根據(jù)對象的__eq__ 魔術(shù)方法(如果可用)和/或與運算符的比較is
(由 Python 解釋器實現(xiàn),始終可用且無法覆蓋),沒有兩個對象相等。
在某些情況下,可能還會有更多的因素發(fā)揮作用。?這顯示了檢查是否應(yīng)將對象添加到結(jié)果列表中的完整過程。
添加回答
舉報