python - 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_1
items
folder_to_find
我可以用运算符检查folder_to_find
对象是否存在于folders
集合中,in
但不能folder_1
借助folder_to_find
它来访问对象items
的属性folder_1
。
我的解决方法是使用 python 字典而不是 set。
不过,我们有什么方法可以用 O(1) 实现这一点吗?
解决方案
您可以使用简单的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']
推荐阅读
- python - ImportError:无法导入名称“后端”
- c# - .NET 中奇怪的委托和操作行为
- corda - corda 节点可以成为多个 corda 网络的一部分吗?一个带有多个 NMS 的 corda 节点可能吗?如何实现私有网管?
- javascript - 在一个命令中运行多个 nodejs 服务器
- c# - 在 ApplicationDbContext 类中访问经过身份验证的用户信息 (ASP.NET Core)
- vue.js - 使用 vuex 确保存储状态中存在变量
- html - 为什么我的属性选择器中没有任何空格时它可以工作?
- php - 方法 App\Http\Controllers\SkillController::show 不存在。- Laravel 5.7
- android - 在 android.os.Looper 中使用 LiveData 方法 getMainLooper 进行单元测试未模拟
- .htaccess - 使用相应的 URL 和查询字符串重定向整个域,除了一个