2015-09-11 3 views
1

У меня есть словарь, какпитон: сортировка ключ: значение пары на основе ключа

i={106:0.33,107:0.21,98:0.56} 

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

{98:0.56, 106:0.33, 107:0.21} 

Когда я использую это:

od = collections.OrderedDict(sorted(i.items())) 
    print(od) 

Я получаю неправильный вывод, как:

[(98,0.56),(106,0.33),(107,0.21)] 

Может кто-нибудь, пожалуйста, помогите мне с правильным кодом для этого?

ответ

2

УпорядоченныйDict запоминает заказ, который вы добавили в словарь, а не порядок сортировки.

Но вы можете легко создать отсортированный список из обычного словаря. Например:

>>> list1={106:0.33,107:0.21,98:0.56} 
>>> sorted(list1.items()) 
[(98, 0.56), (106, 0.33), (107, 0.21)] 

Или, если вы хотите его в OrderedDict, просто применить OrderedDict после сортировки:

>>> from collections import OrderedDict 
>>> 
>>> list1={106:0.33,107:0.21,98:0.56} 
>>> OrderedDict(sorted(list1.items())) 
OrderedDict([(98, 0.56), (106, 0.33), (107, 0.21)]) 

Но обычный Словаре не имеет ни малейшего понятия о порядке сортировки, так что вы не можете Сортировка самого словаря.

Однако, если вы действительно хотите, что дисплей, вы можете создать свой собственный класс:

>>> from collections import OrderedDict 
>>> class MyDict(OrderedDict): 
...  def __repr__(self): 
...   return '{%s}' % ', '.join(str(x) for x in self.items()) 
... 
>>> list1={106:0.33,107:0.21,98:0.56} 
>>> MyDict(sorted(list1.items())) 
{(98, 0.56), (106, 0.33), (107, 0.21)} 
+0

Я хочу выход быть {98: 0,56, 106: 0,33, 107: 0,21}. Как мне это получить? –

+0

@Explore_SDN - добавлен пользовательский класс, пример –

+0

имеет смысл! :) Спасибо. –

Смежные вопросы