在字典中对小数进行排序

rya*_*405 3 python sorting floating-point dictionary decimal

我几乎完成了我的排序问题,在网上浏览了很多时间我偶然发现了一个非常有用的指导,在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))
Run Code Online (Sandbox Code Playgroud)

我得到的结果如下:

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 
Run Code Online (Sandbox Code Playgroud)

我不确定如何编辑我现有的代码,因为.sort(float)单独在我的'avmph'上工作,这个方法应该允许我返回'names'和'avmph'.任何帮助都是非常有用的.

Pad*_*ham 6

你需要强制转换为浮动:

(float(item[1]),item[0]))
Run Code Online (Sandbox Code Playgroud)

您正在排序字符串而不是实际的浮点值:

In [1]: "13.2" < "6.3"
Out[1]: True

In [2]: float("13.2") < float("6.3")
Out[2]: False
Run Code Online (Sandbox Code Playgroud)

因为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}
Run Code Online (Sandbox Code Playgroud)

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