gpt4 book ai didi

python - 按组件对字符串列表进行排序

转载 作者:太空宇宙 更新时间:2023-11-03 13:16:53 26 4
gpt4 key购买 nike

一个长列表包含一些要排序的元素。

其实每个元素有4个内容:name, in/out, area 和 date&time,由'~'连接。 ('~' 可以更改。)我想将列表重新组织为排序顺序。

a_list = ["Chris~Check-in~Zoom A~11/13/2013 05:20",
"Chris~Check-in~Zoom G~11/15/2013 14:09",
"Frank E~Check-in~Zoom K~11/11/2013 08:48",
"Frank E~Check-in~Zoom K~11/15/2013 21:32",
"Kala Lu S~Check-in~Zoom N~11/13/2013 07:20",
"Milly Emily~Check-in~Zoom G~11/13/2013 01:08",
"Milly Emily~Check-in~Zoom E~11/16/2013 14:39",
"Milly Amy~Check-in~Zoom G~11/10/2013 20:14",
"Milly Amy~Check-in~Zoom A~11/16/2013 08:55",
"Milly Amy~Check-in~Zoom O~11/14/2013 21:57",
"Milly Amy~Check-in~Zoom A~11/15/2013 10:45",
"Nago Iko~Check-in~Zoom K~11/16/2013 20:42",
"Nago Iko~Check-in~Zoom K~11/14/2013 10:46",
"Liz D~Check-in~Zoom N~11/15/2013 01:46",
"Liz D~Check-in~Zoom A~11/12/2013 09:54",
"Liz D~Check-in~Zoom G~11/16/2013 13:15",
"Chris~Check-out~Zoom A~11/13/2013 13:42",
"Chris~Check-out~Zoom G~11/11/2013 14:21",
"Chris~Check-out~Zoom G~11/16/2013 09:41",
"Frank E~Check-out~Zoom K~11/14/2013 03:02",
"House P~Check-out~Zoom K~11/10/2013 11:17",
"Kala Lu S~Check-out~Zoom G~11/11/2013 23:27",
"Kala Lu S~Check-out~Zoom N~11/14/2013 11:17"]

它可以导入到 MS Excel 中并进行排序,但我想知道 Python 是否可以完成这项工作。

是否可以按照列表中的顺序对它们进行排序:1.姓名,2.日期和时间3.区域4.进/出?喜欢:

new_list = ["Chris~Check-out~Zoom G~11/08/2014 14:21",
"Chris~Check-in~Zoom A~11/10/2014 05:20",
"Chris~Check-out~Zoom A~11/10/2014 13:42",
"Chris~Check-in~Zoom G~11/12/2014 14:09",
"Chris~Check-out~Zoom G~11/13/2014 09:41",
"Frank E~Check-in~Zoom K~11/08/2014 08:48",
"Frank E~Check-out~Zoom K~11/11/2014 03:02",
"Frank E~Check-in~Zoom K~11/12/2014 21:32",
...
...]

谢谢。

最佳答案

您可以拆分列表,然后使用自定义 key 函数进行排序。但是您需要先解析日期才能正确排序。

import datetime

new_l = sorted((x.split('~') for x in l),
key=lambda x: (x[0],
datetime.datetime.strptime(x[3], '%m/%d/%Y %H:%M'),
x[2],
x[1]))

key 函数返回一个元组。元组按字典顺序进行比较;比较第一项;如果它们相同,则比较第二项,依此类推。 [1]

或者,您可以分阶段排序。这将允许您指定要按升序或降序单独排序的列。

from operator import itemgetter

nl = [x.split('~') for x in l]

nl.sort(key=itemgetter(1))
nl.sort(key=itemgetter(2))
nl.sort(key=lambda x: datetime.datetime.strptime(x[3], '%m/%d/%Y %H:%M'),
reverse=True) # Newest first
nl.sort(key=itemgetter(0))

请记住,这两种方式都会使新列表像这样拆分:

new_list = [["Chris", "Check-out", "Zoom G", "11/08/2014 14:21"], ...]

如果您想将它们改回原来的形式,您可以加入它们:

new_list_joined = ['~'.join(x) for x in new_list]

关于python - 按组件对字符串列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26967497/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com