按列表

时间:2018-01-19 16:16:48

标签: python-3.x sorting dictionary

[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')

1 个答案:

答案 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')])])])]

由于您的事件已经按时间顺序插入,我们可以简单地迭代主列表并反向重新分配任何嵌套列表。