首页 > 解决方案 > python:如何从一组自定义类对象中获取项目

问题描述

class Folder:
    def __init__(self, name):
        self.name = name
        self.items = []
    
    def __hash__(self):
        return hash(self.name)
    
    def __eq__(self, other):
        return self.name == other.name

让我们创建一些文件夹:

folder_1 = Folder('folder_1')
folder_1.items = ['a', 'b', 'c']


folder_2 = Folder('folder_2')
folder_3 = Folder('folder_3')

folders = set([folder_1, folder_2, folder_3])

现在我要做的是在集合中找到一个文件夹并在folders不更改folders集合的情况下访问其项目属性。

folder_to_find = Folder('folder_1')

我们可以注意到folder_to_find == folder_1有属性集和没有属性集True的区别。folder_1itemsfolder_to_find

我可以用运算符检查folder_to_find对象是否存在于folders集合中,in但不能folder_1借助folder_to_find它来访问对象items的属性folder_1

我的解决方法是使用 python 字典而不是 set。

不过,我们有什么方法可以用 O(1) 实现这一点吗?

标签: pythondata-structuresset

解决方案


您可以使用简单的for循环或next使用生成器表达式

folder = next((folder for folder in folders if folder == folder_to_find), None)

folder是一个参考folder_1,您可以获取folder_1数据并对其进行编辑

folder.items[0] = 1
print(folder_1.items) # [1, 'b', 'c']

推荐阅读