gpt4 book ai didi

Python自定义集交集

转载 作者:太空狗 更新时间:2023-10-30 00:46:12 24 4
gpt4 key购买 nike

因此,存在一种通过 set.intersection() 计算两个集合的交集的简单方法。但是,我有以下问题:

class Person(Object):                    
def __init__(self, name, age):
self.name = name
self.age = age

l1 = [Person("Foo", 21), Person("Bar", 22)]
l2 = [Person("Foo", 21), Person("Bar", 24)]

union_list = list(set(l1).union(l2))
# [Person("Foo", 21), Person("Bar", 22), Person("Bar", 24)]

(Object 是我的 ORM 提供的基类,它实现了基本的 __hash____eq__ 功能,基本上添加了类到散列。换句话说,返回的 __hash__ 将是类的每个元素的散列)

在这个阶段,我只想通过 .name 运行集合交集操作,以查找,比方说,Person('Bar', -1).intersection(union_list) #= [Person("Bar", -1), Person("Bar", 22), Person("Bar", 24)]. (此时典型的 .intersection() 不会给我任何东西,我无法覆盖 上的 __hash____eq__ Person 类,因为这会覆盖原始集合并集(我认为)

在 Python 2.x 中执行此操作的最佳方法是什么?

编辑:请注意,该解决方案没有依赖。但是,我需要找到并集,然后再找到交集,所以感觉这对一个集合来说是可行的(但我愿意接受使用你认为有值(value)的任何魔法的解决方案,只要它能解决我的问题!)

最佳答案

听起来像

>>> class Person:
... def __init__(self, name, age):
... self.name = name
... self.age = age
... def __eq__(self, other):
... return self.name == other.name
... def __hash__(self):
... return hash(self.name)
... def __str__(self):
... return self.name
...
>>> l1 = [Person("Foo", 21), Person("Bar", 22)]
>>> l2 = [Person("Foo", 21), Person("Bar", 24)]
>>> union_list = list(set(l1).union(l2))
>>> [str(l) for l in union_list]
['Foo', 'Bar']

是你想要的,因为 name 是你的唯一键?

关于Python自定义集交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10812906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com