Python中以datetime为键的嵌套字典排序报TypeError如何解决
问题原因
- 直接对字典调用
sorted()时,默认仅迭代字典的键,所以返回结果只有排序后的datetime键列表,不会保留对应的嵌套字典值。 - 第二次报错是因为迭代字典时拿到的每个元素都是datetime对象,你在lambda里写
x[0]相当于尝试对datetime对象做下标访问,datetime本身不支持这种操作,所以抛出TypeError。
正确实现
Python 3.7+ 版本(默认字典支持插入顺序保留)
直接对字典的items()返回的键值对元组排序,排序依据取元组的第一个元素(也就是datetime键),开启倒序后转字典即可:
sorted_result_devices = dict(sorted(result_devices.items(), key=lambda x: x[0], reverse=True))
执行后得到的sorted_result_devices就是按时间从新到旧排序的完整嵌套字典,保留所有原始结构。
Python 3.6及更早版本(原生字典不保证顺序)
需要用collections.OrderedDict来存储排序后的结果,确保顺序正确:
from collections import OrderedDict sorted_result_devices = OrderedDict(sorted(result_devices.items(), key=lambda x: x[0], reverse=True))
内容的提问来源于stack exchange,提问作者Bartokid
相关产品推荐
相关产品推荐

