按多个值对字典列表进行排序 [英] Sort list of dicts by multiple values

查看:334
本文介绍了按多个值对字典列表进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下格言

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排序.我完美地做到了:

I want to primarily sort by starttime. Which I do perfectly with:

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

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

But now, I want to sort them by time as well.

预期输出:

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(),却找不到我想要的东西.

How can I accomplish this task? I've looked up the sorted(), and can't find what I'm looking for.

推荐答案

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

Sort them using a tuple as a key like this:

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

按每个元素的顺序依次比较图元.

Tuples are compared by each element in order.

另外,请注意,通过这种方式,可以将值作为字符串而不是数字进行比较.不知道这是否与您有关.

And as a side note, this way the values are compared as strings, not as numbers. Don't know if that's relevant for you.

这篇关于按多个值对字典列表进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆