python - 在字典中对小数进行排序

标签 python sorting dictionary floating-point decimal

我几乎完成了我的排序问题,在网上冲浪了很多个小时后,我偶然发现了一个非常有用的指南,用于在 Python 中对字典进行排序,但是每当我尝试排序时,似乎都会重复出现的一个问题是我的数据要求排序是 float 据类型。

我如何创建 '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”。任何帮助将非常有义务。

最佳答案

你需要转换为 float :

(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 将自动关闭您的文件。

关于python - 在字典中对小数进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29568566/

相关文章:

python - 为简约的 Python 脚本创建一个简单的 GUI

python - 透视单应性问题

c# - OrderBy 自定义比较器数字前的特定字母

objective-c - 有什么快速的方法可以搜索 NSArray 中是否存在某些东西吗?

python - 解析列表中的 Python 字典

python - 在进程运行时不断打印子进程输出

php - 在 PHP/MySQL/Android 上比较单个用户位置与多个用户位置的方法

python - 通过乘法将两个 python 字典与元组组合起来 - Python 3.x

python - 在列表理解中将字符串添加到字典

python - 列表中的两个以下元素