[OrderedDict([('id', 1), ('events', [OrderedDict([('id', 4), ('timestamp', '2018-01-19T15:47:56.587126Z')]),
OrderedDict([('id', 5), ('timestamp', '2018-01-19T15:47:56.587761Z')])])]),
OrderedDict([('id', 2), ('events', [OrderedDict([('id', 6), ('timestamp', '2018-01-19T15:47:56.588413Z')])])])]
我尝试使用
进行排序sorted(my_list, key=lambda e: e['events'][0]['timestamp'], reverse=True)
但这只适用于' events'下的列表。长度为一。如果我做反转=假,我得到正确的顺序(只是向后)但我需要它在最近的时间戳
编辑:
我试图获得的排序将按此顺序排列时间戳:
('timestamp', '2018-01-19T15:47:56.588413Z')
('timestamp', '2018-01-19T15:47:56.587761Z')
('timestamp', '2018-01-19T15:47:56.587126Z')
答案 0 :(得分:1)
您似乎希望反转OrderedDicts列表以及反转任何嵌套列表。我们可以通过反向重新创建列表来完成此任务。
<强>代码强>
def reversed_nested_list(lst):
"""Return a reversed list of shallow nested OrderedDicts."""
main_lst = []
for od in lst[::-1]:
replaced = ct.OrderedDict()
for k, v in od.items():
if not isinstance(v, list):
replaced[k] = v
else:
replaced[k] = v[::-1]
main_lst.append(replaced)
return main_lst
reversed_nested_list(my_list)
输出
[OrderedDict([('id', 2),
('events',
[OrderedDict([('id', 6),
('timestamp',
'2018-01-19T15:47:56.588413Z')])])]),
OrderedDict([('id', 1),
('events',
[OrderedDict([('id', 5),
('timestamp', '2018-01-19T15:47:56.587761Z')]),
OrderedDict([('id', 4),
('timestamp',
'2018-01-19T15:47:56.587126Z')])])])]
由于您的事件已经按时间顺序插入,我们可以简单地迭代主列表并反向重新分配任何嵌套列表。