如何对字典中的数组进行排序?

问题描述:

我目前正在用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"] 
     } 

现在,我要对这个硬盘的方式,并进行嵌套IFS的大名单很长,但我不认为这是正确的方式去做。我试图找出一种方法来通过数组对字典进行排序,然后找到一种方法来显示弹出的前十个字符......而不必深入if语句。

所以......基本上,我的问题是:你有什么想法可以用来使这更容易,而不是wayyyy,更难吗?

=====编辑====

ten + fir会产生数字。我想找到一种方法去排序列表(我缺乏正确的术语知识)去数字(基本上,无论哪个在数组的第一部分中具有最高数字先去。

这里是我目前的打算吧(虽然这样的例子,它是不完整的,因为它是非常烦人:Example Nests (paste2)(让我们试试这个)

====第二个编辑====

在?如果有人没有看到我的评论如下:

ten,fir等ettera - 这些只是变数的分数。基本上,它走从前十名列表变成一个可变数字。ten = 1,nin = 2,fir = 10,fir5 = 10,sec5 = 8,sec = 9 ... so:'adom':[ten + fir + sec + sec5,“Ancient Domain of Mysteries” ]实际上注册为:'盾会':[1 + 10 + 9 + 8, “神秘古域”],这最终看起来像:

'盾会':[28,“古域神秘“]

所以,基本上,如果我最后做了‘前两名’我的例子中,它会是:

((1))Nethack(48)

((2))ADOM(28)

我会写一个实际的数字,但我想改变一些东西的,所以这些数字可能会有所不同,我不想重写它。

== THIRD(希望决赛)EDIT ==

固定我的原始的代码示例。

+1

“Arrays”?你的意思是“列表”?请更新问题。 – 2009-12-11 15:55:08

+0

我不确定十+ fir + sec + sec5如何与示例代码中的变量名称相关,但您可能会很高兴的知道:如果您只是调用'sort(array)',其中的所有元素'array'本身就是列表或元组,排序将首先由列表/元组的第一个元素自动排序,然后排序第二个元素等。 – Wim 2009-12-11 16:24:17

+0

更新您的示例以显示实际结构。 'ten + fir'是一个数字还是一个数字列表?你也不需要\因为你的陈述有'{}'s。 – 2009-12-11 16:25:48

怎么是这样的:

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]) 

是获得前10个键/值对的最直接方式,按每个“值”列表的第一项进行排序。如果你可以更精确地定义你想要的输出(只是名称,名称/值对,还有其他什么?)和排序标准,这当然很容易调整。

Wim的解决方案很好,但我会说你应该多花一点时间,把这项工作推到数据库上,而不是依靠Python。 Python与大多数类型的数据库很好地接口,其中大部分探索的内容已经解决了。例如,您可以简单地根据查询条件对每个相关条目进行预先排序,而不用担心将词典转换为其他各种数据类型以便对其进行正确排序。需要进行复杂的分类和在那里采取行动。

虽然字典很有吸引力,但由于它们给出了类似于数据库的能力以根据其属性访问数据的错觉,我仍然认为它们在实现方面有点磕磕绊绊。我没有任何数字可以抛弃你,但仅仅从个人经验来看,当你涉及操纵大量数据时,你在Python上做的任何事情,你可以在代码和计算方面做得更快,更高效MySQL的。

就数据结构而言,我不确定您计划的是什么,但随着添加数据,使用数据库更改结构也变得更容易。

+0

定义**大** ;-)多达几百个项目,我猜测性能将会与仅使用Python的实现非常相似,同时为您节省大量安装headackes。这一切都取决于(tm)在许多我们不知道的环境条件,然而... – Wim 2009-12-11 16:22:02

+1

-1:不同意。与数据库相比,Python有许多优点。 Python字典,列表和'sorted'函数将很好地完成这个任务,而不会增加SQL的复杂性。数据库有助于数据需要并发访问。否则,Python结构适用于任何适合内存的数据库。 – 2009-12-11 16:34:39

+0

数据库会产生很多开销。 – recursive 2009-12-11 17:15:00