防止python中的重复对象

2024-09-30 06:14:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类定义,比如

class companyInCountry:
    def __init__(self,name,country):
        self.name = name
        self.country = country
        self.amountOwed = defaultdict(int)

我在一张有6行的桌子上循环

COMPANY     COUNTRY  GROSS  NET
companyA    UK       50     40
companyA    DE       20     15
companyA    UK       10     5
companyA    FR       20     10
companyB    DE       35     25
companyB    DE       10     5

在这个表的循环结束时,我希望得到许多公司/地区特定的对象,例如

object1.name = companyA
object1.territory = UK
object1.amountOwed['GROSS'] = 60
object1.amountOwed['NET'] = 45

但我正在努力可视化的是防止创建具有重复公司/国家组合的对象的最佳方法(例如,在我的数据第3行中首次出现这种情况)。在init def中是否有一些数据类型或声明可以忽略重复项?或者,在调用companyCountry(name,country)初始化新实例之前,是否需要手动检查是否存在类似的对象


Tags: 对象nameselfnetinitdef公司de
1条回答
网友
1楼 · 发布于 2024-09-30 06:14:03

最简单的方法是维护一组(company, country)元组,在创建新对象之前可以查阅这些元组。如果该对已经存在,请跳过它,否则创建对象并将新对添加到集合中。差不多

pairs = set()
for row in table:
    if (row.company, row.country) in pairs:
        continue
    pairs.add((row.company, row.country))
    company = CompanyInCountry(row.company, row.country)
    # do something with company

如果您想要一个更面向对象的解决方案,请将公司的创建委托给一个集合类,该集合类在创建之前执行必要的检查


class CompanyCollection:
    def __init__(self):
        # A list to hold the companies - could also be a dict.
        self._companies = []
        self._keys = set()

    def add_company(self, row):
        key = (row.company, row.country)
        if key in self._keys:
            return
        self._companies.append(CompanyInCountry(*key))
        return

    # Define methods for accessing the companies,
    # or whatever you want

相关问题 更多 >

    热门问题