2010-10-04 2 views
0

У меня есть следующий словарь:
{2009: [12, 11, 10, 9], 2010: [1]}реверсивный словарь ключом не работает

Я пытаюсь обратного рода его, так что 2010 приходит первым. Вот код:

def dictSort(dict): 
    items = dict.items() 
    items.sort(reverse=True) 
    dict = {} 
    for item in items: 
     dict[item[0]] = item[1] 
    return dict 

Но взамен я получаю тот же словарь. До цикла for все выглядит отлично. Почему это ?

ответ

2

Ключи словаря не упорядочены. Подумайте о дикторе как наборе пар ключ/значение.

Это приходит в Python 3.1: http://docs.python.org/dev/library/collections.html#collections.OrderedDict

+2

Примечание: 'OrderedDict' также находится в Python 2.7. (Более ранние версии могут использовать [рецепт] (http://code.activestate.com/recipes/576693/)). –

+0

@Piet - Очень круто! – dkamins

2

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

Если вы хотите сделать что-то к нему в отсортированном порядке, вы можете сделать:

items = dict.items.sort(reverse=True) 
for item in items: 
    doSomething(item,mydict[item]) 

или

for key,value in iter(sorted(mydict.iteritems(),reverse=True)) 
    doSomething(key,value) 
+0

dict.items является функцией, а не атрибутом, (BTW, пожалуйста, не используйте Dict для имени переменной!) сортировка выполняется на месте, поэтому вы не можете определить его выход (что равно None). Возможно, для элемента в отсортированном (mydict.items()): ... – tokland

0

Словари не имеют порядок. Если вы пытаетесь вывести словарь в определенном порядке, попробуйте захватить все ключи, отсортировать их и использовать этот список, чтобы узнать, какой порядок выводить.

0

Вот один из способов для создания предметов Dict в обратном порядке ключа:

def dict_sort(thisdict, reverse=True): 
    return ((key, thisdict[key]) for key in sorted(thisdict, reverse=reverse)) 

mydict = {2009: [12, 11, 10, 9], 2010: [1]} 
for i in dict_sort(mydict): 
    print "%i: %s" % i 
Смежные вопросы