按多个值对字典列表进行排序[重复]


问题内容

这个问题已经在这里有了答案

按多个属性对列表进行排序? (6个答案)

4年前关闭。

我有以下意见

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


问题答案:

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

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

每个元素按顺序比较元组。

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