我们被要求设计一个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
答案 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)
获得最活跃和最少的客户。