【发布时间】:2015-02-22 09:16:58
【问题描述】:
我正在尝试按照每个用户的分数从高到低的顺序排列所有分数。我用下面的代码尝试了这个:
import collections
from collections import defaultdict
from operator import itemgetter
worker_scores = collections.defaultdict(lambda: collections.deque(maxlen=3))
import operator
worker_scores.clear()
with open('score_names.txt') as f:
for line in f:
worker,score = line.split(":")
worker_scores[worker].append(int(score))
print("\nThis prints all the highest scores.\n")
for worker in sorted(worker_scores, key=itemgetter(1,2,3), reverse=True):
print(worker," ".join(map(str,worker_scores[worker])))
# This should print the maximum value for each key
print max(worker_scores, key=worker_scores.get)
我的文本文件也出现如下:
AdamJohnson:10
AdamJohnson:20
AdamJohnson:30
AdamJohnson:40
AdamJohnson:60
AdamJohnson:50
MichaelJordan:70
MichaelJordan:80
MichaelJordan:100
MichaelJordan:90
DavidSnowman:15
DavidSnowman:20
DavidSnowman:30
DavidSnowman:25
IDLE的结果如下:
This prints all the highest scores.
MichaelJordan 80 100 90
AdamJohnson 40 60 50
DavidSnowman 20 30 25
这是我想要的,最高分在顶部,最低分在底部。我发现了itemgetter 技术可以做到这一点,所以我现在已经完成了部分解决方案。
对于第二部分,我希望打印每个值的最大键。我可以使用排序键按字母顺序打印键,但我无法打印每个键的最大值。我从上面使用了这一行:
print max(worker_scores, key=worker_scores.get)
要得到这个结果:
AdamJohnson:60
MichaelJordan:100
DavidSnowman:30
但是出现了这个错误:Invalid Syntax (Max)。
出了什么问题?
【问题讨论】:
-
@jonrsharpe 看,先生,我纯粹是为了自己的利益而编写此代码。什么表明我这样做是为了获得任何资格???我很抱歉,但我感到被冒犯了。我一直在查看其他人在 SO 上的项目,以帮助以自己的理解开发自己的程序。请不要暗示我抄袭自己的作品,因为这会破坏我自己的意图。
-
@jonrsharpe 我没有注册 GCSE 资格,因为我已经在上大学了。然后我将删除这个问题并提出一个新问题。为我的爆发道歉,因为你也道歉了,我会把你的 cmets 带上船。谢谢。
-
@DelbertJ.Nava 您在这里只需要使用 sorted 函数对您的字典项目进行排序,然后添加到
OrderedDict,关于提出此类问题,我看到很多人拥有超过100K回答了这样的问题,还有作业问题和......!我觉得这个问题问题不大!! -
@DelbertJ.Nava 无需删除您的问题,您只需要编辑它并向我们展示您尝试解决问题的方法!;)
-
@DelbertJ.Nava :请不要删除您所有的旧问题!我们有很多人在 Stack Overflow 上询问有关这些 GCSE 任务的问题,所以你不能怪我们有点怀疑,尤其是当我们看到来自同一个人的多个关于这些任务的问题时。我建议,如果您想进一步询问与此任务相关的问题,请在问题中明确说明您知道这是一项 GCSE 任务,但您这样做是为了自学,而不是 GCSE。跨度>
标签: python python-3.x dictionary sorted defaultdict