如何计算列表中每个类的唯一出现次数?(Python)

2024-06-26 08:28:21 发布

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

背景:

我正在创建一个脚本,为一家小型餐饮公司创建一个生产清单。列表应包含三列(产品类型、数量、变量)

问题:

我定义了一个类,它包含订单中的信息(产品类型、数量、变量)

class vareclass:
    def __init__(self, vare, qty, meta): 
        self.vare = vare
        self.qty = qty
        self.meta = meta

对于从webshop导出的每个产品表单和每个订单,我向列表中添加一个类对象

varer.append( vareclass(vare, qty, meta) )

这意味着,随着越来越多的人订购,一些产品会出现多次

如何计算每个唯一订购的产品变体(考虑数量)


Tags: 订单self脚本信息类型列表数量定义
2条回答

您可以重写__eq____hash__,并使用字典或collections.Counter对产品进行计数

class vareclass:

    def __init__(self, vare, qty, meta):
        self.vare = vare
        self.qty = qty
        self.meta = meta

    def __eq__(self, other):
        return self.vare == other.vare and self.qty == other.qty

    def __hash__(self):
        return hash(self.vare) + hash(self.qty)

    def __repr__(self): # just for the print
        return f'{self.vare} {self.qty} {self.meta}'


varer = [vareclass('asd', 3, 'asd'), vareclass('asd', 4, 'asd'), vareclass('asd', 3, 'asd'), vareclass('zxc', 3, 'qwe')]

d = {}
for varec in varer:
    d[varec] = d.get(varec, 0) + 1
print(d) # {asd 3 asd: 2, asd 4 asd: 1, zxc 3 qwe: 1}

print(collections.Counter(varer)) # Counter({asd 3 asd: 2, asd 4 asd: 1, zxc 3 qwe: 1})

将它们存储在set中,因为集合是唯一对象的集合

相关问题 更多 >