0

Сортировка Counter в Python по ключам

11

Я имею счетчик, который выглядит примерно так:

Counter: {('A': 10), ('C': 5), ('H': 4)}

Я хочу отсортировать его по ключам в алфавитном порядке, а не по методу counter.most_common().

Есть ли способ достичь этого?

4 ответ(ов)

0

Чтобы отсортировать элементы словаря, используя Python, вы можете воспользоваться модулем collections и классом Counter, который упрощает подсчет объектов, и модулем operator для указания ключа сортировки. Вот пример, как это можно сделать:

from operator import itemgetter
from collections import Counter

c = Counter({'A': 10, 'C': 5, 'H': 4})
sorted_items = sorted(c.items(), key=itemgetter(0))
print(sorted_items)

В этом коде Counter создает словарь, представляющий количество элементов. Затем, используя sorted() и itemgetter(0), мы сортируем элементы по ключу (в данном случае, по символам 'A', 'C', 'H'). Результатом выполненного кода будет отсортированный список кортежей:

[('A', 10), ('C', 5), ('H', 4)]

Таким образом, элементы отсортированы по алфавиту.

0

Для сортировки элементов счетчика collections.Counter по ключам можно использовать следующий код:

import collections

arr = [2, 3, 1, 3, 2, 4, 6, 7, 9, 2, 19]
c = collections.Counter(arr)
sorted_items = sorted(c.items(), key=lambda i: i[0])

На выходе вы получите отсортированный список кортежей по ключам:

[(1, 1), (2, 3), (3, 2), (4, 1), (6, 1), (7, 1), (9, 1), (19, 1)]

Если вам нужно получить результат в формате словаря, вы можете просто обернуть функцию sorted в dict:

sorted_dict = dict(sorted(c.items(), key=lambda i: i[0]))

Это вернет следующий словарь:

{1: 1, 2: 3, 3: 2, 4: 1, 6: 1, 7: 1, 9: 1, 19: 1}

Таким образом, с помощью sorted и dict можно получить как отсортированный список кортежей, так и словарь, отсортированный по ключам.

0

Чтобы получить значения в отсортированном порядке из счетчика, вы можете использовать следующий код:

import collections

array = [1, 2, 3, 4, 5]
counter = collections.Counter(array)
sorted_occurrences = list(dict(sorted(counter.items())).values())

В этом коде мы создаем Counter из массива, который подсчитывает количество вхождений элементов. Затем мы сортируем элементы счетчика с помощью sorted(), преобразуем их в словарь и извлекаем значения с помощью метода .values(). В итоге мы получаем список значений в отсортированном порядке.

0

Для обеспечения сортировки элементов Counter в Python по ключам, вы можете использовать метод sorted(), как в вашем примере. Однако следует отметить, что Counter сохраняет количество каждого элемента и, как вы указали, сортировка по ключам может изменить порядок представления в итоговом объекте.

Вот простой пример, который демонстрирует это:

from collections import Counter

# Исходные данные
counter = Counter({'A': 10, 'C': 5, 'H': 7})

# Сортировка Counter по ключам
sorted_counter = sorted(counter.items())

# Возврат к объекту Counter
result_counter = Counter(sorted_counter)

# Вывод результата
print(result_counter)

Выходной результат будет:

Counter({'A': 10, 'C': 5, 'H': 7})

Теперь касательно вашего второго примера. Если вы измените входные данные на {"a": "1", "t": "1", "e": "1"}, то использование Counter и сортировка приведут к тому, что результат будет таким:

from collections import Counter

# Новые данные
counter2 = Counter({"a": "1", "t": "1", "e": "1"})

# Сортировка Counter по ключам
sorted_counter2 = sorted(counter2.items())

# Возврат к объекту Counter
result_counter2 = Counter(dict(sorted_counter2))

# Вывод результата
print(result_counter2)

Выходной результат будет:

Counter({'a': '1', 'e': '1', 't': '1'})

Таким образом, порядок элементов в итоговом Counter будет зависеть от сортировки ключей, что приведет к изменению порядка, если входные данные изначально не отсортированы.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь