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

у меня есть список словаря, как:

[{'apr': 567.82,
  'aug': 567.82,
  'dec': 0.0,
  'feb': 0.0,
  'jan': 0.0,
  'jul': 567.82,
  'jun': 567.82,
  'mar': 0.0,
  'may': 567.82,
  'nov': 0.0,
  'oct': 567.82,
  'sep': 567.82,
  'tenantname': 7,
  'unitname': 4},
 {'apr': 0.0,
  'aug': 0.0,
  'dec': 567.82,
  'feb': 0.0,
  'jan': 0.0,
  'jul': 0.0,
  'jun': 0.0,
  'mar': 0.0,
  'may': 0.0,
  'nov': 567.82,
  'oct': 0.0,
  'sep': 0.0,
  'tenantname': 2,
  'unitname': 4},
 {'apr': 0.0,
  'aug': 0.0,
  'dec': 0.0,
  'feb': 567.82,
  'jan': 567.85,
  'jul': 0.0,
  'jun': 0.0,
  'mar': 567.82,
  'may': 0.0,
  'nov': 0.0,
  'oct': 0.0,
  'sep': 0.0,
  'tenantname': 1,
  'unitname': 4}]

Я хочу отсортировать список по значению dict, так что

  • dict со значением для месяца 'jan', 'feb', 'mar' будут на первом месте
  • dict со значением для месяца 'apr', 'may', .... будет вторым
  • dict со значением для месяца 'nov', 'dec' будет последним

1 Ответ

3 голосов
/ 06 января 2012

Учитывая ваш словарь как

urdict=[{'mar': 0.0, 'sep': 567.82000000000005, 'may': 567.82000000000005, 'jun': 567.82000000000005, 'jul': 567.82000000000005, 'nov': 0.0, 'feb': 0.0, 'aug': 567.82000000000005,'jan': 0.0, 'apr': 567.82000000000005, 'dec': 0.0, 'oct': 567.82000000000005}, {'mar': 0.0, 'sep': 0.0, 'may': 0.0, 'jun': 0.0, 'jul': 0.0, 'nov': 567.82000000000005, 'feb': 0.0, 'aug': 0.0, 'jan': 0.0, 'apr': 0.0, 'dec': 567.82000000000005, 'oct': 0.0}, {'mar': 567.82000000000005, 'sep': 0.0, 'may': 0.0, 'jun': 0.0, 'jul': 0.0, 'nov': 0.0, 'feb': 567.82000000000005, 'aug': 0.0, 'jan': 567.82000000000005, 'apr': 0.0, 'dec': 0.0, 'oct': 0.0}]

Создать словарь месяцев

month={'jan':0,'feb':1,'mar':2,'apr':3,'may':4,'jun':5,'jul':6,'aug':7,'sep':8,'oct':9,'nov':10,'dec':11}

Создать пустой список словаря для сохранения вашего окончательного результата

ursorteddicts=[]  

Затем используйте словарь месяцев в качестве перекрестной ссылки при сортировке словаря. Окончательный результат должен быть сохранен в OrderedDict для сохранения порядка. Обратите внимание, перед сортировкой необходимо преобразовать словарь в список кортежей (ключ, значение)

for d in urdict:
    ursorteddicts.append(collections.OrderedDict(sorted(((k,v) for k,v in d.iteritems()),key=lambda x:month[x[0]])))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...