2015-03-21 1 views
1

В моем коде, как я могу хранить и сортировать в порядке descendinng в словаре.Сохранение переменных в словаре и сортировке по убыванию

Я хотел хранить Item в качестве ключа и Mutual_information в качестве значения и хранить их в порядке убывания, основанном на численном значении Mutual_information, в словаре.

Мое кодирование, которое содержит переменные item и Mutual_information:

for item in lines: 
    specificy = c[item] 
    try: 
     MI1= specificy/float(specificx) 
     MI2= MI1*specificx 
     M13= specificx*specificx 
     Mutual_Information = MI1* math.log(MI1/float(MI2)) 
     print item, Mutual_Information #to be stored in descendin 
    except ZeroDivisionError: 
     print "divide by zero"  
+5

dicts не имеют порядка, вам понадобится 'collection.OrderedDict', если вы хотите любой заказ, вам нужно сначала отсортировать данные, а затем создать OrderedDict –

+1

https://docs.python.org/2/library/ collections.html # collections.OrderedDict – Selcuk

ответ

1

Как я уже говорил в комментарии dicts неупорядоченен так что это будет получить все элементы в списке, сортировки в обратном порядке и создать OrderedDict из эти упорядоченные элементы:

from collections import OrderedDict 
from operator import itemgetter 

# store all key,value pairings to sort later 
items = [] 
for item in lines: 
    specificy = c[item] 
    try: 
     MI1= specificy/float(specificx) 
     MI2= MI1*specificx 
     M13= specificx*specificx 
     Mutual_Information = MI1* math.log(MI1/float(MI2)) 
     # add tuple of key/value to items 
     items.append((item,Mutual_Information)) 
    except ZeroDivisionError: 
     print "divide by zero" 

# create OrderedDict from sorted items, sorting by the second element 
d = OrderedDict(sorted(items,key=itemgetter(1),reverse=True)) 

пример использования списка кортежей:

from collections import OrderedDict 

items = [(1, 3), (4, 7), (2, 4), (6, 10)] 
from operator import itemgetter 

d = OrderedDict(sorted(items, key=itemgetter(1), reverse=True)) 
print(d) 
OrderedDict([(6, 10), (4, 7), (2, 4), (1, 3)]) 
Смежные вопросы