-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsort_letters.py
More file actions
51 lines (40 loc) · 1.24 KB
/
sort_letters.py
File metadata and controls
51 lines (40 loc) · 1.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
def sort_letters(text):
"""
>>> sort_letters('aaabccccdeefffff')
'fffffccccaaaeebd'
>>> sort_letters('abcdefghijklmnop')
'abcdefghijklmnop'
>>> sort_letters('')
''
>>> sort_letters('aba')
'aab'
>>> sort_letters('abcabccba')
'aaabbbccc'
"""
count_by_letter = {}
for letter in text:
# todo - help(dict.get), help(dict.setdefault)
# todo - from collections import Counter
if letter in count_by_letter:
count_by_letter[letter] += 1
else:
count_by_letter[letter] = 1
for index, letter in enumerate(text):
if letter not in index_by_letter:
index_by_letter[letter] = index
# for letter, count in count_by_letter.items():
# reversed_pairs.append((count, -index_by_letter[letter], letter))
reversed_pairs = [
(count, -index_by_letter[letter], letter)
for letter, count in count_by_letter.items()
]
reversed_pairs.sort(reverse=True)
# result = []
# for count, index, letter in reversed_pairs:
# result.append(letter * count)
# todo - list comprehension
return ''.join([
letter * count
for count, _, letter in reversed_pairs
])
# todo - enumerate