【问题标题】:Sort list of dicts by multiple values [duplicate]按多个值对字典列表进行排序[重复]
【发布时间】:2016-12-11 21:18:02
【问题描述】:

我有以下字典

tempdata = {'logs': [
    {'starttime':'901',
     'time':'5'
     },
    {'starttime':'902',
     'time':'3'
     },
    {'starttime':'900',
     'time':'2'
     },    
    {'starttime':'901',
     'time':'2'
     },
    {'starttime':'905',
     'time':'1'
     },
    {'starttime':'904',
     'time':'1'
     }
]
}

我想主要按starttime 排序。我做得很好:

 tempdata['logs'] = sorted(tempdata['logs'],key=lambda k: k['starttime'])

但是现在,我也想按时间对它们进行排序。

预期输出:

tempdata = {'logs': [
    {'starttime':'900',
    'time':'2'
    },
    {'starttime':'901',
     'time':'2'
     },
    {'starttime':'901',
     'time':'5'
     },
    {'starttime':'902',
     'time':'3'
     },
    {'starttime':'904',
     'time':'1'
     },
    {'starttime':'905',
     'time':'1'
     }
]
}

我怎样才能完成这项任务?我查找了 sorted(),但找不到我要查找的内容。

【问题讨论】:

  • 谢谢@Mephy 我找不到那个,太完美了!我将把这个问题留在这里,因为我的一个确实提到了字典/列表,而另一个提到了列表/元组。
  • 为什么这些问题总是很容易 INT!

标签: python sorting dictionary


【解决方案1】:

使用元组作为键对它们进行排序,如下所示:

tempdata['logs'] = sorted(tempdata['logs'],
                          key=lambda k: (k['starttime'], k['time']))

元组按每个元素的顺序进行比较。

顺便说一句,这种方式将值作为字符串而不是数字进行比较。不知道这是否与您相关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 2011-02-22
    • 2022-01-19
    • 2016-03-14
    • 2010-11-15
    相关资源
    最近更新 更多