【问题标题】:Sort List according to the value of dictionary根据字典的值对列表进行排序
【发布时间】:2012-01-06 13:04:31
【问题描述】:

我有一个字典列表,例如:

[{'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','may' 月份值的dict,...将排在第二位
  • 带有 'nov'、'dec' 月份值的字典将最后出现

【问题讨论】:

  • 也许在这方面做任何尝试然后寻求帮助会更有建设性
  • 请使用 pprint 打印字典,这是完全不可读的。替换像 567.82000000000005 这样的值也是一个好主意。另外,我不太明白你想要达到什么目的。试着澄清你的问题。
  • @BeRecursive:双关语+1
  • @Matt 我担心没有斜体没有人会得到它 - 愚蠢的评论格式
  • 斜体cmets 中不起作用?

标签: python list sorting dictionary


【解决方案1】:

给定你的字典

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 2014-07-13
    • 1970-01-01
    • 2023-03-26
    • 2021-05-29
    相关资源
    最近更新 更多