Python中如何按字典值内的日期时间字段对字典排序
问题
我有如下结构的字典:
{'user_0': [['item_805696', '2021-02-11 13:03:42'], ['item_386903', '2021-02-11 13:03:52'], ['item_3832', '2021-02-11 13:04:07'], ['item_849824', '2021-02-11 13:05:04']], 'user_1': [['item_97057', '2021-02-11 13:03:42'], ['item_644971', '2021-02-11 13:09:32'], ['item_947129', '2021-02-11 13:15:27'], ['item_58840', '2021-02-11 13:16:11'], ['item_640213', '2021-02-11 13:17:40']], ... }
我希望按照字典值中每个子元素的第二个值(日期时间)对字典的值进行排序,请问该如何实现?
解决方案
可以遍历字典的每个键值对,对每个用户对应的列表使用sorted()函数,以子列表的第二个元素(日期时间字符串)作为排序依据。由于你的日期时间格式是YYYY-MM-DD HH:MM:SS,这种格式的字符串可直接按字典序比较,无需额外转换;如果需要更严谨的时间逻辑处理,也可以转为datetime对象。
基础实现代码
# 假设你的字典名为user_items user_items = { 'user_0': [['item_805696', '2021-02-11 13:03:42'], ['item_386903', '2021-02-11 13:03:52'], ['item_3832', '2021-02-11 13:04:07'], ['item_849824', '2021-02-11 13:05:04']], 'user_1': [['item_97057', '2021-02-11 13:03:42'], ['item_644971', '2021-02-11 13:09:32'], ['item_947129', '2021-02-11 13:15:27'], ['item_58840', '2021-02-11 13:16:11'], ['item_640213', '2021-02-11 13:17:40']] } # 对每个用户的列表按日期时间升序排序 for user, items in user_items.items(): user_items[user] = sorted(items, key=lambda x: x[1]) # 查看排序后的结果 for user, items in user_items.items(): print(f"{user}:") for item in items: print(f" {item}")
扩展说明
- 若需要降序排序,只需添加
reverse=True参数:user_items[user] = sorted(items, key=lambda x: x[1], reverse=True) - 若日期时间格式无法直接按字符串比较(如
MM/DD/YYYY),可转换为datetime对象后排序:from datetime import datetime user_items[user] = sorted(items, key=lambda x: datetime.strptime(x[1], '%Y-%m-%d %H:%M:%S'))
内容的提问来源于stack exchange,提问作者JS J
相关产品推荐
相关产品推荐

