【问题标题】:How to Sort Arrays in Dictionary?如何对字典中的数组进行排序?
【发布时间】:2009-12-11 15:43:29
【问题描述】:

我目前正在用 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 语句。

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

===== 编辑 ====

十+冷杉产生数字。我想找到一种方法来对列表进行排序(我缺乏正确术语的知识)以按数字排序(基本上,数组第一部分中数字最大的排序优先。

这是我目前的做法的一个例子(尽管它不完整,因为它非常令人厌烦:Example Nests (paste2)(让我们试试这个?)

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

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

十、冷杉等 - 这些只是分数的变量。基本上,它从前十名列表变为可变数字。 十 = 1,宁 = 2,冷杉 = 10,冷杉 = 10,秒 5 = 8,秒 = 9... 所以 : 'adom': [ten+fir+sec+sec5, "Ancient Domain of Mysteries"] 实际上注册为 : 'adom': [1+10+9+8, "神秘的古代领域”],最终看起来像:

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

所以,基本上,如果我最终在我的示例中完成了“前两个”,那就是:

((1)) 网络黑客 (48)

((2)) ADOM (28)

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

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

修复了我原来的代码示例。

【问题讨论】:

  • “数组”?你的意思是“列表”吗?请更新问题。
  • 我不确定 10+fir+sec+sec5 与示例代码中的变量名称有何关系,但您可能会很高兴知道:如果您只调用 sort(array) array 的所有元素本身都是列表或元组,sort 将首先按列表/元组的第一个元素自动排序,然后按第二个,依此类推。
  • 更新您的示例以显示实际结构。 ten+fir 是一个数字还是一个数字列表?你也不需要 \ 因为你的声明有{}s。
  • @Dexodro:不要在自己的问题上写 cmets。你拥有这个问题。您可以更新问题以使其清晰且对其他人有用。请删除您的问题所针对的 cmets。

标签: python arrays dictionary sorting logic


【解决方案1】:

这样的事情怎么样:

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

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

【讨论】:

    【解决方案2】:
    import heapq
    
    return heapq.nlargest(10, games.iteritems(), key=lambda k, v: v[0])
    

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

    【讨论】:

      【解决方案3】:

      Wim 的解决方案很好,但我想说您可能应该加倍努力,将这项工作放到数据库中,而不是依赖 Python。 Python 可以与大多数类型的数据库很好地交互,而您正在探索的大部分内容已经是一个已解决的问题。

      例如,您不必担心将字典转换为各种其他数据类型以便对其进行正确排序,您可以简单地获取每个相关条目的所有数据,并根据您的查询条件进行预排序。那里需要进行复杂的排序和诉诸。

      虽然字典很容易使用,因为它们给人一种类似于数据库的能力的错觉,可以根据其属性访问数据,但我仍然认为它们在实现方面存在相当大的障碍。我真的没有任何数字可以告诉你,但仅从个人经验来看,当涉及到处理大量数据时,你在 Python 上所做的任何事情,你都可以在代码和计算方面做得更快、更高效,比如MySQL。

      我不确定您对数据结构的计划是什么,但是除了添加数据之外,使用数据库更改其结构也容易得多。

      【讨论】:

      • Define large ;-) 多达几百个项目,我猜性能与纯 Python 实现非常相似,同时为您节省了很多设置麻烦.这一切都取决于(tm)我们不知道的许多环境条件......
      • -1:不同意。与数据库相比,Python 具有许多优势。 Python 字典、列表和sorted 函数可以很好地做到这一点,而不会增加 SQL 的复杂性。当数据需要具有并发访问权限时,数据库会有所帮助。否则,Python 结构对于任何适合内存的数据库都非常有效。
      • 数据库会产生很多开销。
      • 我想我的偏见是 for 并发使用。考虑到前面提到的用例,不至少计划未来的可扩展性和并发使用是没有意义的。否则你为什么要在一台机器上为一个人制作这样的程序?这听起来像是 Web 应用程序的一个组件。
      • 也许,或者这只是一个快速而肮脏的脚本,对他从网上抓取的排名进行一些离线处理,我们不知道......但你的建议在一般意义上,所以我会 +1 你回到 0。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-02
      • 2020-04-13
      • 1970-01-01
      • 2015-03-07
      • 1970-01-01
      • 2020-09-26
      • 1970-01-01
      相关资源
      最近更新 更多