Реверсивный словарь по ключу не работает - PullRequest
0 голосов
/ 04 октября 2010

У меня есть следующий словарь:
{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 все выглядит нормально. Почему это так?

Ответы [ 4 ]

2 голосов
/ 04 октября 2010

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

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

2 голосов
/ 04 октября 2010

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

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

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 голосов
/ 04 октября 2010

Здесь один из способов создания элементов dict в обратном порядке ключей (кстати, не используйте 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
0 голосов
/ 04 октября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...