我有一个包含以下行的.txt文件:
pablo 9.50
sergio 2
Rose 10
oto 11.4
maria 7.9 我有以下程序:
scores = {}
read = open("C:/Users/renato/Desktop/HTML Files/myfile.txt")
for cont in read:
(name,score)=cont.split()
scores[score] = name
read.close()
print("The top scores are: ")
for eachscore in sorted(scores.keys(), reverse = True):
print("Surfer "+scores[eachscore]+" scored "+eachscore)当我运行程序时,它返回相同的列表,就像文件中看到的一样。
我正在尝试对结果进行排序,因此我使用sorted()函数对‘score’字典的键进行排序。但这些条目是以相同的顺序打印的,而不是按预期排序。
我是不是漏掉了什么?
谢谢!
发布于 2013-07-17 12:11:53
您是否希望根据它们的浮点值对它们进行排序?然后,您忘记了对float()的调用。如果没有它,结果如下:
>>> scores
{'11.4': 'oto', '10': 'Rose', '9.50': 'pablo', '2': 'sergio', '7.9': 'maria'}
>>> sorted(scores.keys(), reverse = True)
['9.50', '7.9', '2', '11.4', '10']正如您所看到的,这些数字是没有排序的(因为它们是以字符串的形式表示的),但是,对它们调用float()函数就可以做到这一点。
>>> for cont in f:
(name, score) = cont.split()
scores[float(score)] = name
>>> scores
{9.5: 'pablo', 2.0: 'sergio', 11.4: 'oto', 10.0: 'Rose', 7.9: 'maria'}
>>> sorted(scores.keys(), reverse = True)
[11.4, 10.0, 9.5, 7.9, 2.0]现在,你可以这样做-
scores = {}
read = open("C:/Users/renato/Desktop/HTML Files/myfile.txt")
for cont in read:
(name,score)=cont.split()
scores[float(score)] = name
read.close()
print("The top scores are: ")
for eachscore in sorted(scores.keys(), reverse = True):
print("Surfer "+scores[eachscore]+" scored "+str(eachscore))发布于 2013-07-17 12:27:32
您不能将分数添加为dict key
问题是:
>>> x={'9':'suhail','9':'ta'}
>>> x
{'9': 'ta'}该密钥将覆盖旧的
因此最好的方法是使用名称作为dict key
import operator
scores = {}
read = open("C:/Users/renato/Desktop/HTML Files/myfile.txt")
for cont in read:
(name,score)=cont.split()
scores[name] = float(score)
read.close()
sorted_x = sorted(scores.iteritems(), key=operator.itemgetter(1))
print (sorted_x)发布于 2013-07-17 12:14:06
您需要将分数转换为数字(否则,您将比较字符串):
for eachscore in sorted((float(x) for x in scores.keys()), reverse = True):
print("Surfer "+scores[eachscore]+" scored "+eachscore)https://stackoverflow.com/questions/17690950
复制相似问题