Python - 按日期排序的2D数组时间

时间:2017-10-05 16:16:21

标签: python python-2.7 python-3.x numpy

我有以下二维数组:

arr = [
["A", "B", "C", "10.03.2030", "14:06"],
["W", "R", "Q", "09.04.2025", "12:06"],
["Y", "X", "V", "11.05.2022", "12:06"],
["Z", "N", "H", "10.03.2030", "14:06"],
]

我想通过&对数组进行排序时间,在python中有一种快速的方法吗?

提前致谢

和j

3 个答案:

答案 0 :(得分:5)

您可以先将日期转换为ISO8601格式进行排序(而不是使用datetime.strptime转换为实际日期非常慢),然后使用已标准化的时间字符串断开关系:

lst = sorted(arr, key=lambda x: (x[3].split('.')[::-1], x[-1]))
print(lst)

x[3].split('.')[::-1]从原始日期字符串构建ISO日期列表,将年份放在第一个月,下一个月,然后是日期。

[['Y', 'X', 'V', '11.05.2022', '12:06'],
 ['W', 'R', 'Q', '09.04.2025', '12:06'],
 ['A', 'B', 'C', '10.03.2030', '14:06'],
 ['Z', 'N', 'H', '10.03.2030', '14:06']]

答案 1 :(得分:0)

正如answer中所述,您应该使用itemgetter来实现此目的。

要按时间对数据进行排序,请使用:

from operator import itemgetter
print(sorted(arr, key=itemgetter(4)))
[['W', 'R', 'Q', '09.04.2025', '12:06'], 
['Y', 'X', 'V', '11.05.2022', '12:06'], 
['A', 'B', 'C', '10.03.2030', '14:06'], 
['Z', 'N', 'H', '10.03.2030', '14:06']]

如果需要按日期(年份)排序,则需要定义单独的函数或使用lamda。我写了两个解决方案:

def sorting(item):
    return item[3].split('.')[2]

print(sorted(arr, key=sorting))

# using lambda
print(sorted(arr, key= lambda item:item[3].split('.')[2]))

[['Y', 'X', 'V', '11.05.2022', '12:06'], 
['W', 'R', 'Q', '09.04.2025', '12:06'], 
['A', 'B', 'C', '10.03.2030', '14:06'], 
['Z', 'N', 'H', '10.03.2030', '14:06']]

这样您就不会依赖第三方软件包导入。

答案 2 :(得分:0)

非常简短而且整齐的代码比上面给出的其他代码

lst = sorted(arr, key=lambda x: (x[3].split('.')[::-1], x[-1]))