在字典中对小数进行排序

Sorting decimals within a dictionary

我几乎完成了我的排序问题,在网上冲浪了很多个小时后,我偶然发现了一个非常有用的指南,用于在 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' 上工作,这种方法应该允许我 return 'names' 和 'avmph'。任何帮助将非常有义务。

您需要转换为浮动:

(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".

不完全确定 name 和 avmph 是如何排列的,但是如果它们每隔一行出现一次,您可以这样做:

with open("1.txt") as f:
    d = {next(f).rstrip():next(f).rstrip() for line in f}

next(f).rstrip() 每次调用都会前进到下一行,因此我们将每隔一行作为键和值。 with 将自动关闭您的文件。