Сортировать счетчик по частоте, затем по алфавиту в Python

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

letter_count = collections.Counter("alphabet")
print(letter_count)

производит:

Counter({'a': 2, 'l': 1, 't': 1, 'p': 1, 'h': 1, 'e': 1, 'b': 1})

Как мне упорядочить его по частоте, а затем по алфавиту, чтобы все, что отображается только один раз, было в алфавитном порядке?

4 ответа

Решение

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

>>> a = sorted(letter_count.items(), key=lambda item: (-item[1], item[0]))
>>> print(a)
# [('a', 2), ('b', 1), ('e', 1), ('h', 1), ('l', 1), ('p', 1), ('t', 1)]

Если вы хотите, чтобы на выходе все еще был диктат, вы можете преобразовать его в collections.OrderedDict:

>>> collections.OrderedDict(a)
# OrderedDict([('a', 2),
#              ('b', 1),
#              ('e', 1),
#              ('h', 1),
#              ('l', 1),
#              ('p', 1),
#              ('t', 1)])

Это сохраняет порядок, как вы можете видеть. 'a' первый, потому что это наиболее часто. Все остальное отсортировано по алфавиту.

Вы можете отсортировать ввод перед передачей его счетчику.

>>> Counter(sorted("alphabet")).most_common()
[('a', 2), ('b', 1), ('e', 1), ('h', 1), ('l', 1), ('p', 1), ('t', 1)]

Для полноты, чтобы получить единичные буквы в алфавитном порядке:

letter_count = collections.Counter("alphabet")

single_occurrences = sorted([letter for letter, occurrence in letter_count.items() if occurrence == 1])
print(single_occurrences)
# prints: ['b', 'e', 'h', 'l', 'p', 't']

Вы можете попробовать это:

letter_count = collections.Counter("alphabet")

the_letters = [a for a, b in letter_count.items() if b == 1]
letters.sort()
print("letters that occur only once:")

for i in the_letters:
     print(i)

Этот код создает список всех букв, которые встречаются только один раз, используя списки, а затем печатает их все. items() возвращает пару ключ-значение, которую можно использовать, чтобы определить, равно ли значение ключа единице.

Таким образом:

for l in letter_count:
    if letter_count[l] == 1:
        print(l) # or do what you want

Обратите внимание, что foreach в коллекции перебирает ключи (ваши буквы). Затем вы проверяете, точно ли значение, связанное с ключом, равно 1.

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