如何在字典中对数组排序?

2024-05-14 08:20:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在用Python编写一个程序来跟踪视频游戏的统计数据。我用来追踪分数的词典的一个例子:

ten = 1
sec = 9
fir = 10
thi5 = 6
sec5 = 8

games = {
        'adom': [ten+fir+sec+sec5, "Ancient Domain of Mysteries"],
        'nethack': [fir+fir+fir+sec+thi5, "Nethack"]
        }

现在,我要用一种艰难的方式来解决这个问题,并且列出一个长长的嵌套if列表,但是我认为这不是正确的方法。我在想办法通过数组对字典进行排序,然后找到一种方法来显示弹出的前十个。。。而不是必须深入研究if语句。在

所以。。。基本上,我的问题是:你有什么想法我可以用来让这更简单,而不是wayyyy,更难?在

====编辑====

10+fir产生数字。我想找到一种方法来对列表进行排序(我缺乏适当的术语知识),按数字排序(基本上,数组第一部分中数字最高的那一个先排序)。在

这里有一个例子说明了我目前的处理方式(虽然,它是不完整的,因为它非常令人厌烦:Example Nests (paste2)(让我们试试这个?)在

===第二次编辑====

如果有人看不到我下面的评论:

10,fir,等等-这些只是分数的变量。基本上,它从前十名的名单变成了一个可变数字。 10=1,nin=2,fir=10,fir5=10,sec5=8,sec=9。。。 所以:“adom”:[ten+fir+sec+sec5,“古代神秘领域”]实际上注册为:“adom”:[1+10+9+8,“古代神秘领域”],其结果是:

'adom':[28,“古老的神秘领域”]

所以,基本上,如果我在我的例子中做了“前两名”,那就是:

((1)) Nethack (48)

((2)) ADOM (28)

我会写一个实际的数字,但我正在考虑改变一些东西,这样数字可能会有点不同,我不想重写它。在

==第三次(希望是最后一次)编辑==

修正了我原来的代码示例。在


Tags: 方法编辑排序方式数字sec分数领域
3条回答

Wim的解决方案很好,但是我想说,您可能应该多做一点,将这项工作推到数据库中,而不是依赖Python。Python与大多数类型的数据库都有很好的接口,在这些数据库中,您正在探索的许多内容已经是一个已解决的问题。在

例如,您不必担心将词典转换为其他各种数据类型以便对它们进行正确排序,您只需根据查询的条件对每个相关条目的所有数据进行预排序。这里需要复杂的分类和重新排序。在

虽然词典很受欢迎,因为它们给人一种类似数据库的能力,可以根据数据的属性访问数据,但我仍然认为它们在实现方面有很大的缺陷。我真的没有什么数字可以告诉你,但是从个人经验来看,你在Python上做的任何事情,当涉及到处理大量数据时,你可以用类似MySQL的东西在代码和计算上做得更快更高效。在

我不知道你在数据结构方面有什么计划,但是随着数据的增加,改变数据结构也更容易使用数据库。在

这样的怎么样:

scores = games.items()
scores.sort(key = lambda key, value: value[0])
return scores[:10]

这将返回前10项,按数组中的第一项排序。 我不确定这是否是你想要的,请更新问题(并修复示例链接)如果你需要其他东西。。。在

import heapq

return heapq.nlargest(10, games.iteritems(), key=lambda k, v: v[0])

是获取前十个键/值对的最直接方法,按每个“值”列表的第一项排序。如果您可以更精确地定义所需的输出(只是名称、名称/值对或其他什么?)而排序标准,这是很容易调整的,当然。在

相关问题 更多 >

    热门问题