Сортировка десятичных знаков в словаре
Я почти закончил свою проблему с сортировкой, много часов просматривая веб-страницы, я наткнулся на чрезвычайно полезное руководство по сортировке словарей в Python, но проблема, которая возникает снова, когда я пытаюсь сортировать, заключается в том, что мои данные, требующие сортировки, тип данных с плавающей точкой.
Пример того, как я создаю переменные 'names'x' 'и' avmph'x ''
file1=open("1.txt",'r')
line1=file1.readlines()
names1=line1[0].rstrip('\n')
avmph1=line1[3].rstrip('\n')
mydict={names1:avmph1,
names2:avmph2,
names3:avmph3,
names4:avmph4,
names5:avmph5,
names6:avmph6,
names7:avmph7,
names8:avmph8,
names9:avmph9,
names10:avmph10}
for key, value in sorted(mydict.items(),key=lambda item:(item[1],item[0])):
print ("%s : %s" % (key,value))
Результат, который я получаю, выглядит следующим образом:
1987dodd : 10
3219guy : 11.6
2198adams : 12.2
8765james : 13.2
4321jones : 6.3
5432kane : 6.3
9876smith : 6.5
8754smith : 8.7
7654max : 9
6543dunne : 9.5
#seems to sort values that are greater than 10 (2 digits before decimal) separately
Я не уверен, как отредактировать свой существующий код, так как.sort (float) работал только на моем "avmph", этот метод должен позволять мне возвращать "имена" и "avmph". Любая помощь будет очень благодарна.
1 ответ
Вы должны бросить, чтобы плавать:
(float(item[1]),item[0]))
Вы сортируете строки, а не фактическое значение с плавающей точкой:
In [1]: "13.2" < "6.3"
Out[1]: True
In [2]: float("13.2") < float("6.3")
Out[2]: False
Так как ord("6") > ord("1")
"6.3"
считается> "13.2"
,
Не совсем уверен, как соотносятся имя и avmph, но если вы на каждой второй строке, вы можете сделать что-то вроде:
with open("1.txt") as f:
d = {next(f).rstrip():next(f).rstrip() for line in f}
next(f).rstrip()
переходит к следующей строке при каждом вызове, поэтому мы используем каждую вторую строку как ключ и значение. with
автоматически закроет ваш файл.