Python:从集合中提取元素

时间:2018-04-27 16:07:31

标签: python python-3.x set

我有一个班级:

class MyClass:
    def__init__( self, name : str ) -> None:
        self.__name : str = name
        self.extra : object = None

    def __eq__( self, other : object ) -> bool:
        if not isinstance( other, MyClass ):
            return False

        return self.__name == other.__name

    def __hash__( self ) -> int:
        return hash( self.__name )

因此__name是不可变的,如果两个MyClass共享相同的__name,则它们相等。

我有一个定义的集合:

eggs = MyClass( "eggs" )
beans = MyClass( "beans" )
spam = MyClass( "spam" )
c.extra = "spam spam spam"
my_set : Set[MyClass] = { eggs, beans, spam }

我可以测试spam是否在我的集合中:

has_spam : bool = MyClass( "spam" ) in my_set 

但如何通过名称获取“spam.extra”?我可以使用dict,但这需要复制name属性,或者我可以迭代,但这看起来很浪费。

1 个答案:

答案 0 :(得分:1)

没有办法用我所知道的集合做你想要的事情(没有迭代整个事情)。据我了解,从集合中获取任何东西的唯一方法是迭代它或使用set.pop,这将获得集合中的任意元素。

您可以使用字典将您称之为__name的内容映射到extra(并避免使用任何自定义类),即

my_set = {"eggs": "some extra data", "beans": None, "spam": None}

这似乎就是你想要使用字典的情况,除非你还没有提到更多的要求。