Написание кодов на 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)]
... хотя это выглядит немного непитонным.