Если вы используете python 3.7+, вы можете просто отсортировать имена, и dict сохранит порядок вставки.
from collection import Counter
names = sorted(['sam','sam','leo','leo','john','jane','jane'])
names_count = Counter(names)
names_count.most_common(1)
В противном случае, чтобы гарантировать порядок без зависимости от python версии, вы можете сделать следующее
def get_names_count(lst):
names_count = {}
for item in sorted(lst):
names_count[item] = names_count.get(item, 0) + 1
return names_count
def get_most_common_name(names_count):
most_common = sorted(names_count, key=lambda x: (-x[1], x[0]))
return most_common[0]
Обратите внимание, что я заменил lst.sort()
на sorted(lst)
, так как это плохая практика для изменения глобальных объектов (python передает указатель на список, а не его копия)
Кроме того, нет необходимости хранить их счет в списке, так что вы можете сразу посчитать имена со значением по умолчанию 0 для имени
PS К тому времени, когда я написал DYZ уже ответил на этот вопрос, поэтому мой код - это просто рефакторинг вашего get_names_count