Я пытаюсь сделать это упражнение в руководстве Python:Возврат словарных ключей и значения в алфавитном порядке
Напишите программу, которая считывает строку в командной строке и возвращает таблицы букв алфавита в алфавитном порядке, который происходит в строке вместе с количеством раз, которое имеет каждая буква . Случай следует игнорировать. Образец запуска программы будет выглядеть так:
$ python letter_counts.py "ThiS is String with Upper and lower case Letters."
a 2
c 1
d 1
e 5
g 1
h 2
i 4
l 2
n 2
o 1
p 2
r 4
s 5
t 5
u 1
w 2
$
Я уже написал функцию для подсчета букв и хранить их в словаре наряду с соответствующими значениями:
def count_all(text):
text = text.lower()
counts = {}
for char in text:
if char not in counts:
counts.setdefault(char,1)
else:
counts[char] = counts[char] + 1
print(counts)
, но мне стыдно сказать, что я полностью ошеломлен тем, как вы можете даже заказывать элементы в типе сопоставления, используя какие-либо правила. Должен ли я преобразовать их в список? Должен ли я использовать ord()
в любой точке?
EDIT: Основываясь на ответах, которые я получил, мне удалось заставить функцию распечатать элементы в алфавитном порядке, не используя какие-либо методы, которые я еще не полностью понял. Вот что:
def count_all(text):
text = text.lower()
counts = {}
for char in text:
if char not in counts:
counts.setdefault(char,1)
else:
counts[char] = counts[char] + 1
counts = sorted(counts.items())
for i in counts:
print(i[0],' ',i[1])
count_all('banana')
Это хорошее решение? как это может быть улучшено?
try 'sorted (counts.items())'. Связано: 'collections.Counter' делает то, что вы хотите уже – JBernardo