2012-01-06 4 views
-4

У меня есть список словарь, как:Списка Сортировать по значению словаря

[{'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}] 

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

  • ДИКТ со значением для месяц «jan», «feb», «mar» наступят первые
  • dict со значением за месяц 'apr', 'may', .... будет вторым
  • dict со значением за месяц ' нов ',' dec 'наступит последним
+7

Возможно изготовление какой-либо попытки в этом, а затем с просьбой о помощи было бы более конструктивно – BeRecursive

+1

Пожалуйста, используйте pprint для печати словаря, это совершенно нечитаемо. Замена таких ценностей, как 567.82000000000005, также была бы хорошей идеей. Кроме того, я не совсем понимаю, чего вы пытаетесь достичь. Попытайтесь прояснить свою проблему. – pawroman

+0

@BeRecursive: +1 для каламбура – MattH

ответ

3

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

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=[] 

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

for d in urdict: 
    ursorteddicts.append(collections.OrderedDict(sorted(((k,v) for k,v in d.iteritems()),key=lambda x:month[x[0]]))) 
Смежные вопросы