首页 > 解决方案 > 按日期和时间python对数据进行排序

问题描述

我的数据在 txt 文件中。

1   B   F   2019-03-10 
1   C   G   2019-03-11 
1   B   H   2019-03-10 
1   C   I   2019-03-10 
1   B   J   2019-03-10 
2   A   K   2019-03-10 
1   D   L   2019-03-10 
2   D   M   2019-03-10 
2   E   N   2019-03-11 
1   E   O   2019-03-10 

我需要做的是根据第一列拆分数据。

因此,第一列中编号为 1 的所有行都转到一个列表(或字典或其他),而第一列中编号为 2 的所有行都转到另一个列表或其他列表中。这是一个样本数据,在原始数据中,我们不知道第一列中有多少个不同的数字。

我接下来要做的是按日期和时间对每个键的数据(在我的情况下是数字 1 和 2)进行排序。我可以用 data.txt 做到这一点,但不能用字典。

with open("data.txt") as file: 
    reader = csv.reader(file, delimiter="\t")
    data=sorted(reader, key=itemgetter(0))
    lines = sorted(data, key=itemgetter(3))

lines

OUTPUT:
[['1', 'B', 'F', '2019-03-10'],
 ['2', 'D', 'M', '2019-03-10'],
 ['1', 'B', 'H', '2019-03-10'],
 ['1', 'C', 'I', '2019-03-10'],
 ['1', 'B', 'J', '2019-03-10'],
 ['1', 'D', 'L', '2019-03-10'],
 ['2', 'A', 'K', '2019-03-10'],
 ['1', 'E', 'O', '2019-03-10'],
 ['1', 'C', 'G', '2019-03-11'],
 ['2', 'E', 'N', '2019-03-11']]

所以我需要的是按第一列中的数字对数据进行分组,并按日期和时间对其进行排序。谁能帮我以某种方式组合这两个代码?我不确定我是否必须使用字典,也许还有另一种方法可以做到这一点。

标签: pythonsortingdictionarygrouping

解决方案


根据第一列拆分数据后,可以对每个key对应的列表进行排序

def sort_by_time(key_items):
    return sorted(key_items, key=itemgetter(3))

d = {k: sort_by_time(v) for k, v in d.items()}

如果d时间和日期有单独的元素,那么您可以按几列排序:

sorted(key_items, key=itemgetter(2, 3))

推荐阅读