Python大量Item对象的最优组织方式咨询
Python 大量对象组织的最佳实践
你的当前实现(修正语法问题后)
class Item: # 类名用单数更符合Python命名规范 def __init__(self, name, a, b): self.name = name self.a = a self.b = b def mod_b(items): for item in items: item.b = False # 按名称作为唯一标识存储对象 items_dict = { 'Shirt': Item('shirt', 1, True), 'Ball': Item('ball', 2, False), # ... 其余100个对象 } # 直接筛选b为True的对象(替代原代码的键列表方案) my_list = [item for item in items_dict.values() if item.b] mod_b(my_list)
业内常用的最佳实践
1. 优先用字典按唯一标识存储对象
字典是Python中组织大量可索引对象的标准方案,用对象的唯一标识(如名称、ID)作为键,既能快速定位单个对象,也能通过values()获取全量对象集合,兼顾索引效率和批量操作需求,这是最通用的选择。
2. 筛选/批量操作直接处理对象
避免先存储键再二次查询字典的做法,直接从items_dict.values()中筛选对象,减少一次字典查找开销,代码也更简洁。比如上面的筛选逻辑直接得到对象列表,mod_b函数可直接修改对象属性,无需依赖外部字典。
3. 用数据类简化对象定义(Python 3.7+)
如果你的Item只是简单数据容器,没有复杂业务方法,用dataclasses模块可以省去手写__init__的样板代码,还支持默认值、对象比较等功能:
from dataclasses import dataclass @dataclass class Item: name: str a: int b: bool
4. 封装容器类管理复杂逻辑
如果需要频繁进行筛选、批量更新、统计等操作,建议封装一个容器类,把这些逻辑集中管理,提升代码可维护性:
class ItemContainer: def __init__(self): self._items = {} # 私有字典存储对象 def add_item(self, item): self._items[item.name] = item def get_item_by_name(self, name): return self._items.get(name) def get_items_by_condition(self, condition): """按自定义条件筛选对象,比如lambda item: item.b is True""" return [item for item in self._items.values() if condition(item)] def update_b_for_items(self, items, new_value): for item in items: item.b = new_value # 使用示例 container = ItemContainer() container.add_item(Item('Shirt', 1, True)) container.add_item(Item('Ball', 2, False)) # 筛选b为True的对象 true_items = container.get_items_by_condition(lambda x: x.b) # 批量更新属性 container.update_b_for_items(true_items, False)
5. 需要避免的方案
- 不要为每个对象单独创建变量:100个对象单独存变量会导致代码极度臃肿,完全无法维护。
- 除非无索引需求,否则不用set:set仅适合去重或判断对象是否存在的场景,无法快速定位单个对象,大部分场景下字典更实用。
内容的提问来源于stack exchange,提问作者Cullen
相关产品推荐
相关产品推荐

