Написание кодов на Python, чтобы получить самого активного и наименьшего клиента

Нам предлагается разработать графический интерфейс для расчета наиболее активных и наименее активных клиентов. Внизу есть две кнопки, которые подсчитывают наиболее и наименее активного покупателя. Существует также область результатов, в которой будет отображаться результат нажатия двух кнопок.

Под ним есть список и две кнопки. Имена будут отображаться в списке. Например, когда я ввожу "sam" в textCtrl номер один, и нажимаю кнопку "Добавить клиента". Сэм появится в списке. После ввода разных или одинаковых имен несколько раз. Список с именами - это список. Например, в списке есть три "Сэма" и два "Джастина". Когда я нажимаю "Самая активная кнопка", в окне результатов появляется имя sam. Когда я нажимаю на наименее активную кнопку, в окне результатов появится имя Джастина.

Я успешно определил кнопку добавления клиента, но не знаю, как определить кнопки, рассчитывающие наиболее активных и наименее активных клиентов. Кто-то сказал мне, что мне нужно использовать функцию подсчета, но я не уверен, как это сделать.

Вот что я получил так далеко:

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):

Может ли кто-нибудь помочь мне на следующем этапе? Спасибо! PS Имя поля результатов - m_textCtrl2 Имя поля списка - m_listbox1.

2 ответа

Можете ли вы изменить свой код следующим образом:

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)

чтобы получить самый активный и наименьший клиент.

collection.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)]

... хотя это выглядит немного непитонным.

Другие вопросы по тегам