Сортировать словарь по количеству значений под каждым ключом - PullRequest
0 голосов
/ 20 февраля 2012

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

как если бы это:

{
    "2010": [2],
    "2009": [4,7],
    "1989": [8]
}

станет таким:

{   
    "2009": [4,7],
    "2010": [2],
    "1989": [8]
}

Как бы я вернул только те ключи, которые имели> 1 значение

 "2009": [4,7]

Ответы [ 2 ]

8 голосов
/ 20 февраля 2012

Словари не упорядочены, поэтому нет способа сортировки самого словаря. Вы можете преобразовать свой словарь в упорядоченный тип данных В Python 2.7 или выше вы можете использовать collections.OrderedDict:

from collections import OrderedDict
d = {"2010": [2], "2009": [4,7], "1989": [8]}
ordered_d = OrderedDict(sorted(d.viewitems(), key=lambda x: len(x[1])))
2 голосов
/ 20 февраля 2012

Стандартный тип dict по сути является хеш-таблицей и не позволяет пользователю переупорядочивать свои ключи.Однако этого можно достичь, используя OrderedDict:

In [1]: d = {
   ...:     "2010": [2],
   ...:     "2009": [4,7],
   ...:     "1989": [8]
   ...: }

In [2]: from collections import OrderedDict

In [5]: OrderedDict(sorted(d.items(), key=lambda (k,v):len(v), reverse=True))
Out[5]: OrderedDict([('2009', [4, 7]), ('2010', [2]), ('1989', [8])])

Чтобы отфильтровать записи, которые короче двух элементов:

In [7]: dict((k,v) for k,v in d.items() if len(v) > 1)
Out[7]: {'2009': [4, 7]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...