在字典中对小数进行排序
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
将自动关闭您的文件。
我几乎完成了我的排序问题,在网上冲浪了很多个小时后,我偶然发现了一个非常有用的指南,用于在 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
将自动关闭您的文件。