Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选择python集与自定义对象相交时要保留的元素_Python_Dictionary_Hashmap_Set_Intersection - Fatal编程技术网

选择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)
)。但是,如果您关心输出中的元素,那么似乎并不是真正在语义上使用集合。我已经尝试颠倒操作顺序。。这没什么区别。