В Python, как вы можете легко получить отсортированные элементы из словаря? - PullRequest
12 голосов
/ 11 сентября 2008

Словари в отличие от списков не упорядочены (и не имеют атрибута 'sort'). Поэтому вы не можете рассчитывать на получение элементов в том же порядке при первом добавлении.

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

Например, у вас было это:

d = {'b' : 'this is b', 'a': 'this is a' , 'c' : 'this is c'}

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

this is a
this is b
this is c

Ответы [ 8 ]

17 голосов
/ 11 сентября 2008

Вы имеете в виду, что вам нужны значения, отсортированные по значению ключа? В этом случае это должно сделать это:

for key in sorted(d):
    print d[key]

РЕДАКТИРОВАТЬ: изменено на использование отсортированного (d) вместо отсортированного (d.keys ()), спасибо Eli !

16 голосов
/ 11 сентября 2008

или короче,

for key, value in sorted(d.items()):
    print value
1 голос
/ 12 сентября 2008

Вы также можете отсортировать словарь по значению и управлять порядком сортировки:

import operator

d = {'b' : 'this is 3', 'a': 'this is 2' , 'c' : 'this is 1'}

for key, value in sorted(d.iteritems(), key=operator.itemgetter(1), reverse=True):
    print key, " ", value

Выход:
б это 3
это 2
с это 1

1 голос
/ 11 сентября 2008
for key in sorted(d):
  print d[key]
1 голос
/ 11 сентября 2008
>>> d = {'b' : 'this is b', 'a': 'this is a' , 'c' : 'this is c'}
>>> for k,v in sorted(d.items()):
...     print v, k
... 
this is a a
this is b b
this is c c
1 голос
/ 11 сентября 2008

Этот фрагмент сделает это. Если вы собираетесь делать это часто, возможно, вы захотите создать метод «sortkeys» или что-нибудь подобное, чтобы облегчить глаза.

keys = list(d.keys())
keys.sort()
for key in keys:
    print d[key]

Редактировать: решение dF лучше - я забыл все о sorted ().

0 голосов
/ 28 октября 2016

Вы имеете в виду «отсортировано» вместо «заказано»? Кажется, ваш вопрос направлен на сортировку словаря, а не на его упорядочение. Если вы имеете в виду «заказано», вы можете использовать OrderedDict из модуля коллекций. Эти словари запоминают порядок, в котором были введены пары ключ / значение:

from collections import OrderedDict

Справочная информация: https://docs.python.org/2/library/collections.html#collections.OrderedDict

0 голосов
/ 11 сентября 2008
d = {'b' : 'this is b', 'a': 'this is a' , 'c' : 'this is c'}
ks = d.keys()
ks.sort()
for k in ks:
    print "this is " + k
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...