Python编写代码以获得最活跃的客户和最少的客户

时间:2014-10-04 04:30:57

标签: python spyder wxformbuilder

我们被要求设计一个GUI来计算最活跃和最不活跃的客户。 底部有两个按钮,用于计算最活跃和最不活跃的客户。 还有一个结果区域将显示按下两个按钮的结果。

有一个列表框,下面有两个按钮。名称将显示在列表框中。例如,当我在textCtrl第一个中输入“sam”时,单击“添加客户”按钮。 Sam将出现在列表框中。几次输入不同或相同的名称后。名称列表是列表框。例如,列表框中有三个“sam”和两个“justin”。单击“最活跃按钮”时,名称sam将出现在结果框中。当我点击最不活跃的按钮时,名称justin将出现在结果框中。

我成功定义了添加客户按钮,但我不知道如何定义计算最活跃和最不活跃客户的按钮。有人告诉我我需要使用计数功能,但我不知道该怎么做。

这是我到目前为止所得到的:

def addcustomer(self,event):
    try:
        name=str(self.m_textCtrl1.Value)
        self.m_listBox1.Append(str(name))
    except:
        wx.MessageBox("This can't be empty.")

def mostactive(self,parent):

有人可以帮我下一步吗? 谢谢! 附:结果框的名称是m_textCtrl2 列表框的名称是m_listbox1

2 个答案:

答案 0 :(得分:0)

collections.Counter有一个非常方便的方法.most_common,用于获取列表中最常见的项目:

>>> from collections import Counter
>>> namesCounter = Counter(['Rod', 'Rod', 'Rod', 'Jane', 'Jane', 'Freddie'])
>>> namesCounter.most_common(1)
[('Rod', 3)]

可以像这样获得最不常见的项目:

>>> [(k, min(namesCounter.values())) for k, v in namesCounter.iteritems() if v == min(namesCounter.values())]
[('Freddie', 1)]

......虽然看起来确实有些不同于pythonic。

答案 1 :(得分:0)

你可以像这样修改你的代码:

customer = {}

def addcustomer(self,event):
    try:
        name=str(self.m_textCtrl1.Value)
        self.m_listBox1.Append(str(name))
        if name in customer:
            customer[name] += 1
        else:
            customer[name] = 1
    except:
        wx.MessageBox("This can't be empty.")

最终客户词典将是= {' sam' :3,' justin' :2} ,并使用

max(customer, key=customer.get) min(customer, key=customer.get)

获得最活跃和最少的客户。