Сортировка значений словаря в порядке возрастания - PullRequest
0 голосов
/ 31 января 2012

У меня есть словарь вида:

d = { 'someText': floatNumber }

Где floatNumber - отметка времени эпохи. Я пытаюсь организовать это так, чтобы время было в порядке возрастания.

Пример: {'someText':0000001, 'someText1':0000002, and so on}

Единственный способ, которым я могу думать о том, чтобы сделать это, это выполнить цикл с for k,v in dict.items() и затем вручную отсортировать его в список, но это может занять много времени. Любая помощь будет принята с благодарностью.

Ответы [ 4 ]

4 голосов
/ 31 января 2012

Может быть, вы хотите:

import operator
values = sorted(d.items(), key=operator.itemgetter(1))

, который будет генерировать отсортированный список кортежей, например,

[('someText', 1), ('someText', 2), ...]

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

0 голосов
/ 31 января 2012

Словарь порядка может использоваться для хранения записей в отсортированном порядке:

>>> from collections import OrderedDict
>>> d = OrderedDict(sorted(dict.items(), key=lambda item: item[1]))
0 голосов
/ 31 января 2012

Во-первых, по умолчанию словари не отсортированы.Возможно, вы захотите использовать список и вставить его в соответствующее место при создании набора данных.В противном случае используйте функцию sorted.

sorted(dict.iteritems(), key=lambda (x, y): y)
0 голосов
/ 31 января 2012
from operator import itemgetter

d = {'foo':1, 'bar':3, 'baz':2}
l = [(k, v) for k, v in d.items()]
s = sorted(l, key=itemgetter(1))

# s == [('foo', 1), ('baz', 2), ('bar', 3)]

Подробнее о сортировке: http://wiki.python.org/moin/HowTo/Sorting

Редактировать:

Улучшенная версия (спасибо за комментарий):

from operator import itemgetter

d = {'foo':1, 'bar':3, 'baz':2}
s = sorted(d.items(), key=itemgetter(1))

# s == [('foo', 1), ('baz', 2), ('bar', 3)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...