На этом шаге мы рассмотрим пример использования класса collections.Counter.
У вас есть последовательность элементов, и вы хотите узнать, какие элементы встречаются в ней чаще всего.
Класс collections.Counter разработан как раз для решения подобных задач. В нем даже есть удобный метод most_common(), который сразу выдаст вам ответ.
Чтобы проиллюстрировать это, предположим, что у вас есть список слов, и вы хотите найти наиболее часто встречающееся. Вот как можно это сделать:
>>> words = [ 'look', 'into', 'my', 'eyes', 'look', 'into', 'my', 'eyes', 'the', 'eyes', 'the', 'eyes', 'the', 'eyes', 'not', 'around', 'the', 'eyes', "don't", 'look', 'around', 'the', 'eyes', 'look', 'into', 'my', 'eyes', "you're", 'under' ] >>> from collections import Counter >>> word_counts = Counter(words) >>> top_three = word_counts.most_common(3) >>> print(top_three) [('eyes', 8), ('the', 5), ('look', 4)] >>>
На входе объектам класса Counter можно скормить любую последовательность хешируемых элементов. В основе Counter лежит словарь, который отображает количество вхождений элементов. Например:
>>> word_counts['not'] 1 >>> word_counts['eyes'] 8 >>>
Если вы хотите увеличить счет вручную, используйте сложение:
>>> morewords = ['why', 'are', 'you', 'not', 'looking', 'in', 'my', 'eyes'] >>> for word in morewords: word_counts[word] += 1 >>> word_counts['eyes'] 9 >>>
Или же вы можете использовать метод update():
>>> word_counts.update(morewords) >>>
Малоизвестная возможность экземпляров Counter состоит в том, что они могут быть легко скомбинированы с использованием разнообразных математических операций. Например:
>>> a = Counter(words) >>> b = Counter(morewords) >>> a Counter({'eyes': 8, 'the': 5, 'look': 4, 'into': 3, 'my': 3, 'around': 2, 'not': 1, "don't": 1, "you're": 1, 'under': 1}) >>> b Counter({'why': 1, 'are': 1, 'you': 1, not': 1, 'looking': 1, 'in': 1, 'my': 1, 'eyes': 1}) >>> # Объединяем счетчики >>> c = a + b >>> c Counter({'eyes': 9, 'the': 5, 'look': 4, 'my': 4, 'into': 3, 'not': 2, 'around': 2, "don't": 1, "you're": 1, 'under': 1, 'why': 1, 'are': 1, 'you': 1, 'looking': 1, 'in': 1}) >>> # Вычитаем счетчики >>> d = a - b >>> d Counter({'eyes': 7, 'the': 5, 'look': 4, 'into': 3, 'my': 2, 'around': 2, "don't": 1, "you're": 1, 'under': 1}) >>>
Нет смысла упоминать, что объекты Counter - невероятно полезный инструмент для практически любых задач, где вам нужно перевести данные в табличную форму и посчитать их. Рекомендуем использовать этот способ, а не писать вручную решения на основе словарей.
На следующем шаге мы рассмотрим сортировку списка словарей по общему ключу.