Сортировать счетчик по частоте, затем по алфавиту в 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.