选择python集与自定义对象相交时要保留的元素
假设我有一个名为选择python集与自定义对象相交时要保留的元素,python,dictionary,hashmap,set,intersection,Python,Dictionary,Hashmap,Set,Intersection,假设我有一个名为Node 节点有两个属性,名称和年龄 我有一组名为set1的节点,另一组名为set2 我想得到set1和set2的交点 但是,我希望交集方法中的比较完全基于name属性 这是通过重写\uuuu eq\uu方法来实现的 这意味着,如果节点(“Jenna”,54)存在于set1中,而节点(“Jenna”,29)存在于set2中,则这些节点之一将存在于仪表段中 如果在与set2的交叉口中存在节点,我如何强制交叉口保持节点来自set1 即-在上述示例中,如何强制交叉点包含节点(“Jenn
Node
节点
有两个属性,名称
和年龄
我有一组名为set1
的节点,另一组名为set2
我想得到set1
和set2
的交点
但是,我希望交集方法中的比较完全基于name
属性
这是通过重写\uuuu eq\uu
方法来实现的
这意味着,如果节点(“Jenna”,54)
存在于set1
中,而节点(“Jenna”,29)
存在于set2
中,则这些节点之一将存在于仪表段中
如果在与set2
的交叉口中存在节点,我如何强制交叉口保持节点来自set1
即-在上述示例中,如何强制交叉点包含节点(“Jenna”,54)
和而不是节点(“Jenna”,29)
有什么想法吗?看看:
如果覆盖\uuuu eq\uuuu
和\uuuu hash\uuuuu
可能会起作用,但相交将保留最短集合的元素
另一种方法是:
s2_names = {n.name for n in s2}
inter = {n for n in s1 if s1.name in s2_names}
我认为,后面的集合将始终替换前面集合中的项目,因此您可以在此基础上对交叉点进行排序(即set2.intersection(set1)
)。但是,如果您关心输出中的元素,那么似乎并不是真正在语义上使用集合。我已经尝试颠倒操作顺序。。这没什么区别。