我有一个填充了HTML元素的列表。 我还有一个填充了日期/时间的列表,该列表与HTML列表并列。
如何根据时间/日期列表对HTML列表进行排序? 时间/日期以时间戳格式给出。
你可以使用zip
函数。
timestamps, elements = zip(*sorted(zip(timestamps, elements)))
结果会是两个元组,如果你愿意,可以将它们转换为列表。
zipped = zip(timestamps, htmls)
zipped.sort()
sorted_htmls = [html for (timestamp, html) in zipped]
使用枚举函数可以为列表中的每个元素提供一个(index, item)元组列表。您可以使用索引从时间戳列表中读取排序关键字,然后去除HTML元素:
sorted_elems = [elem for i,elem in sorted(enumerate(html_elements),
key=lambda x:timestamps[x[0]])]
more_itertools
的第三方包:import more_itertools
timestamps = ["08-11-17", "01-13-17", "11-22-17"]
elements = ["<p>", "<b>", "<a href>"]
more_itertools.sort_together([timestamps, elements])
# [('01-13-17', '08-11-17', '11-22-17'), ('<b>', '<p>', '<a href>')]
请参阅{{link1:more_itertools
文档}}以获取更多信息。
sort()
是原地排序,而sorted()
则创建一个新列表,所以对于大列表来说,通常你需要使用sort()
。 :-) - Ben Blank