2015-06-29 1 views
2

Я знаю, что есть похожие вопросы, но я не могу найти ответ на свою конкретную проблему. Поэтому у меня есть тысячи записей, которые имеют следующий формат:Сортировка словаря на основе наибольшей суммы значений массива

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

Выше приведен пример вывода, что я получаю, но то, что я хочу, чтобы данные, которые должны быть упорядочены таким образом, что первая линия самая большая сумма его значений массива (иначе я хочу, чтобы генE был первым в этом выпуске, потому что он имеет наибольшую сумму). В моем словаре гены являются ключами, а список чисел - значением, создающим пары ключ-значение. В настоящее время это мой код, который печатает в порядке убывания самые большие и самые низкие значения в соответствии с первым столбцом чисел, а не сумму, которую я хочу.

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, что я хочу его сортируют на основе суммы значений списка, а не только первое значение в списке. Будем чрезвычайно признательны любой помощи! Спасибо.

+0

так, как вы описали своего Dict похоже, не соответствует тому, как вы выбираете элементы в нем. Можете ли вы отредактировать вопрос, чтобы показать ** точный ** способ форматирования вашего диктата (имеет ли он список чисел или это строка, разделенная пробелом и т. Д.)? – Brien

+0

Я просто сократил заявление печати. Он выглядит так: клавиша печати, словарь [ключ] [0], словарь [ключ] [1], словарь [ключ] [2] – dahlia

ответ

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]