3 回答
TA贡献1725条经验 获得超7个赞
假设你的字典是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}
我看到你说你的对象不可散列。如果它们是您创建的对象,您可以覆盖该__hash__()函数并定义您自己的方式以使它们可散列。
TA贡献1824条经验 获得超8个赞
您可以使用itertools.chain它对所有值创建迭代器。然后是一个简单的技巧,使用dict.fromkeys而不是集合来保留顺序,同时仅保留唯一值。(请记住,对象必须是可索引/可散列的)您将需要弄清楚这些对象如何进行比较才能完成此任务。
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条经验 获得超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
这将返回一个列表,其中根据对象的__eq__ 魔术方法(如果可用)和/或与运算符的比较is
(由 Python 解释器实现,始终可用且无法覆盖),没有两个对象相等。
在某些情况下,可能还会有更多的因素发挥作用。 这显示了检查是否应将对象添加到结果列表中的完整过程。
添加回答
举报