根据字典的值排序列表

时间:2012-01-06 13:04:31

标签: python list sorting dictionary

我有一个字典列表:

[{'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的值对列表进行排序,例如

  • 本月有价值的字典' jan',' feb'' mar'将是第一个
  • 有关当月价值的字典' apr''可能' ,....将成为第二个
  • 具有月份价值的字典' nov'' dec'将会到最后

1 个答案:

答案 0 :(得分: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=[]  

然后在对字典进行排序时使用`月字典作为交叉引用。最终结果应存储在OrderedDict中以保留订单。注意在排序之前,您需要将字典转换为(键,值)元组列表

for d in urdict:
    ursorteddicts.append(collections.OrderedDict(sorted(((k,v) for k,v in d.iteritems()),key=lambda x:month[x[0]])))