Сортировка словаря по алфавиту
Программа преобразовывает строку в словарь и сортирует его по фамилии в алфавитном порядке, если фамилии одинаковые, то сортировка у данных людей происходит по имени. Почему у меня на выходе программы количество людей меньше, чем на входе?
import ast
s = "Alexis:Wahl;John:Bell;Victoria:Schwarz;Abba:Dorny;Grace:Meta;Ann:Arno;Madison:STAN;Alex:Cornwell;Lewis:Kern;Megan:Stan;Alex:Korn"
f=s.replace(":","':'")
i=f.upper().replace(";","','")
s1="'"
s2="'"
ins=s1+i+s2
d = ast.literal_eval('{'+ins+'}')
rev_dict = dict((v,k) for k,v in d.items())
t=''
e=sorted(rev_dict.items(), key=lambda x: (x[0],x[1]))
print(e)
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Потому что в словаре не может быть одинаковых ключей, а у вас повторяются как имена, так и фамилии, поэтому некоторые элементы словаря "затираются". Этот вопрос уже обсуждался, можно поискать дубликаты.
А так то сортировать можно и кортежи в списке, словари в данном случае вообще не нужны:
s = "Alexis:Wahl;John:Bell;Victoria:Schwarz;Abba:Dorny;Grace:Meta;Ann:Arno;Madison:STAN;Alex:Cornwell;Lewis:Kern;Megan:Stan;Alex:Korn"
lst = [tuple(x.split(':')) for x in s.upper().split(';')]
res = sorted(lst, key=lambda x: (x[1],x[0]))
print(res)
Вывод:
[('ANN', 'ARNO'), ('JOHN', 'BELL'), ('ALEX', 'CORNWELL'), ('ABBA', 'DORNY'), ('LEWIS', 'KERN'), ('ALEX', 'KORN'), ('GRACE', 'META'), ('VICTORIA', 'SCHWARZ'), ('MADISON', 'STAN'), ('MEGAN', 'STAN'), ('ALEXIS', 'WAHL')]