首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sorted()函数Python

Sorted()函数Python
EN

Stack Overflow用户
提问于 2013-07-17 12:08:30
回答 3查看 209关注 0票数 0

我有一个包含以下行的.txt文件:

代码语言:javascript
复制
pablo 9.50 
sergio 2 
Rose 10 
oto 11.4 
maria 7.9 

我有以下程序:

代码语言:javascript
复制
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’字典的键进行排序。但这些条目是以相同的顺序打印的,而不是按预期排序。

我是不是漏掉了什么?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-17 12:11:53

您是否希望根据它们的浮点值对它们进行排序?然后,您忘记了对float()的调用。如果没有它,结果如下:

代码语言:javascript
复制
>>> 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()函数就可以做到这一点。

代码语言:javascript
复制
>>> 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]

现在,你可以这样做-

代码语言:javascript
复制
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))
票数 3
EN

Stack Overflow用户

发布于 2013-07-17 12:27:32

您不能将分数添加为dict key

问题是:

代码语言:javascript
复制
>>> x={'9':'suhail','9':'ta'}
>>> x
{'9': 'ta'}

该密钥将覆盖旧的

因此最好的方法是使用名称作为dict key

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2013-07-17 12:14:06

您需要将分数转换为数字(否则,您将比较字符串):

代码语言:javascript
复制
for eachscore in sorted((float(x) for x in scores.keys()), reverse = True):
    print("Surfer "+scores[eachscore]+" scored "+eachscore)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17690950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档