Q:怎么给一个乱序元组列表按时间排序?

2021-04-01 21:50:54 +08:00
 maloneleo88
list = [('2021-03-18 21:30', '16863', '4032', '0', '3'),('2021-03-18 19:15', '42898', '9917', '2', '2'),('2021-03-16 21:30', '9918', '7239', '1', '0'),('2021-03-16 19:15', '9916', '16988', '1', '0'),('2021-03-09 21:30', '9924', '9914', '0', '1'),('2021-03-18 21:30', '16863', '4032', '0', '3')]

要转换日期时间成时间戳吗?还是有更简单的方法?主要列表里是元组,应该怎么写呢?
我想倒序,是按正序排完了再 reversed 吗?
1684 次点击
所在节点    Python
13 条回复
touchwithe
2021-04-01 22:06:12 +08:00
list.sort(lambda item: datetime.datetime.strptime(item[0], ‘%Y-%m-%D %H:%M’), reverse=True)
手机回复,没测试,应该是这样的。看一下 list.sort 的两个参数就知道了。
echowuhao
2021-04-01 22:10:24 +08:00
不转换直接用 str 比较应该也是对的吧
infun
2021-04-01 22:13:27 +08:00
```python
import time

def take_first(elem):
time_string = elem[0]
return time_string

input_list = [('2021-03-18 21:30', '16863', '4032', '0', '3'),('2021-03-18 19:15', '42898', '9917', '2', '2'),('2021-03-16 21:30', '9918', '7239', '1', '0'),('2021-03-16 19:15', '9916', '16988', '1', '0'),('2021-03-09 21:30', '9924', '9914', '0', '1'),('2021-03-18 21:30', '16863', '4032', '0', '3')]

input_list.sort(key=take_first, reverse=True)

print(input_list)
```
Gorgine
2021-04-01 22:14:25 +08:00
list = [('2021-03-18 21:30', '16863', '4032', '0', '3'),('2021-03-18 19:15', '42898', '9917', '2', '2'),('2021-03-16 21:30', '9918', '7239', '1', '0'),('2021-03-16 19:15', '9916', '16988', '1', '0'),('2021-03-09 21:30', '9924', '9914', '0', '1'),('2021-03-18 21:30', '16863', '4032', '0', '3')]
sorted_list = sorted(list, key=lambda x: x[0], reverse=True)
print(sorted_list)
infun
2021-04-01 22:15:42 +08:00
楼上这个更好
maloneleo88
2021-04-01 22:25:01 +08:00
@touchwithe
@infun
@echowuhao
@infun
谢谢啊 !!!

@Gorgine 这么骚的操作是怎么做到的, 也没用 datatme 。 讲讲啊大神 lambda 不太懂,不就是匿名函数吗? 怎么就按时间排列了呢??
touchwithe
2021-04-01 22:31:52 +08:00
@maloneleo88 字符串排序是逐个比较字符,所以正好和日期排序的结果一样
Gorgine
2021-04-01 22:33:16 +08:00
对 时间比较没必要转成 datetime 或者时间戳 字符串也是可以比较的

sorted 有个参数叫 key, 这个 key 可以传个函数进去,函数的参数默认就是这个 list 的 item,就是每个元祖,所以在这个匿名函数里面取 x[0],就取到来元祖的第一项,也就是那个时间字符串,然后 sorted 会根据 x[0]来给这个 list 排序
maloneleo88
2021-04-01 22:36:11 +08:00
@touchwithe
@Gorgine

666

擦,不学了。 我这撅腚捅咕一个小时没捅咕出来。。

老大们 接活吗?
Gorgine
2021-04-01 22:37:59 +08:00
@maloneleo88 接咋了
maloneleo88
2021-04-01 22:41:33 +08:00
@Gorgine 好的 等有机会的
lululau
2021-04-01 22:47:03 +08:00
sorted_list = sorted(list, key=operator.itemgetter(0), reverse=True)
lululau
2021-04-01 22:49:48 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/767355

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX