【问题标题】:Sorting dictionary based on largest sum of array values根据数组值的最大总和对字典进行排序
【发布时间】:2015-09-16 11:41:23
【问题描述】:

我知道那里有类似的问题,但我找不到具体问题的答案。所以我有成千上万的条目,格式如下:

geneA   6  0  0
geneB   5  0  0
geneC   4  0  0
geneD   3  0  0
geneE   0  6  1

以上是我得到的输出示例,但我想要的是对数据进行排序,以使第一行的数组值之和最大(也就是我希望geneE 成为第一个在这个输出中,因为它的总和最大)。在我的字典中,基因是键,数字列表是值,创建键值对。目前,这是我的代码,它根据第一列数字按降序打印出从最大值到最小值,而不是我想要的总和。

for key,value in sorted(dictionary.items(),key=lambda i:i[1][0],reverse=True):
    print key,dictionary[key][0],dictionary[key][1],dictionary[key][2]

我正在努力弄清楚如何在 Python 中声明我希望它根据列表值的总和进行排序,而不仅仅是列表的第一个值。任何帮助将不胜感激!谢谢你。

【问题讨论】:

  • 您描述 dict 的方式似乎与您在其中选择项目的方式不匹配。您可以编辑问题以显示您的 dict 格式化的确切方式(它是否有数字列表或者它们是空格分隔的字符串等)?
  • 我只是缩短了打印语句。它看起来像这样:打印键,字典[键][0],字典[键][1],字典[键][2]

标签: python sorting dictionary key-value


【解决方案1】:

我假设您的 dict 格式如下:

{'geneA' : [6,0,0] ,...}

此键功能将正确输出按您想要的顺序排序的列表:

>>> for key,value in sorted(dictionary.items(),key=lambda i:sum(i[1]),reverse=True):
    print key,value


geneE [0, 6, 1]
geneA [6, 0, 0]
geneB [5, 0, 0]
geneC [4, 0, 0]
geneD [3, 0, 0]

【讨论】:

    猜你喜欢
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多