为了账号安全,请及时绑定邮箱和手机立即绑定

从字典中获取没有唯一属性的唯一对象列表

从字典中获取没有唯一属性的唯一对象列表

翻阅古今 2023-12-12 14:58:22
我有一本字典,其中包含对象列表,其值如下:{"A": [obj1, obj2, obj3], "B": [obj1, obj4, obj5]}在这里,我想获得一个独特对象的列表,例如[obj1, obj2, obj3, obj4, obj5]这些对象没有单一的唯一属性(例如唯一的 id)。我尝试使用 set() 但由于对象不可散列,所以我没有成功。我怎样才能完成这个任务?
查看完整描述

3 回答

?
qq_遁去的一_1

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__()函数并定义您自己的方式以使它们可散列。


查看完整回答
反对 回复 2023-12-12
?
有只小跳蛙

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]


查看完整回答
反对 回复 2023-12-12
?
汪汪一只猫

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 解释器实现,始终可用且无法覆盖),没有两个对象相等。

在某些情况下,可能还会有更多的因素发挥作用。 这显示了检查是否应将对象添加到结果列表中的完整过程。


查看完整回答
反对 回复 2023-12-12
  • 3 回答
  • 0 关注
  • 51 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信