簡體   English   中英

如何計算列表中每個唯一出現的類? (Python)

[英]How do I count up each unique occurrence of class in list? (Python)

背景:

我正在創建一個腳本,該腳本為一家小型餐飲公司創建了一份制作清單。 該列表應包含三列(產品類型、數量、變體)

問題:

我定義了一個類,其中包含訂單中的信息(產品類型、數量、變體)

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

對於從網上商店導出的每個訂單的每個產品,我將一個類對象添加到列表中。

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

這意味着,隨着越來越多的人訂購它們,某些產品會出現多次。

我如何計算每個獨特的訂購產品變體(考慮數量)?

您可以覆蓋__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})

將它們存儲在 集合中,因為集合是唯一對象的集合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM