【发布时间】:2011-07-14 03:22:21
【问题描述】:
我有一个包含 HTML 元素的列表。我还有一个包含日期/时间的列表,它与 HTML 列表平行。
如何根据时间/日期列表对 HTML 列表进行排序?时间/日期采用时间戳格式。
【问题讨论】:
我有一个包含 HTML 元素的列表。我还有一个包含日期/时间的列表,它与 HTML 列表平行。
如何根据时间/日期列表对 HTML 列表进行排序?时间/日期采用时间戳格式。
【问题讨论】:
【讨论】:
sort() 是就地的,而 sorted() 创建一个新列表,所以 sort() 它通常是你想要的大列表。 :-)
将两个列表压缩成元组,排序,然后从元组中取出 HTML:
zipped = zip(timestamps, htmls)
zipped.sort()
sorted_htmls = [html for (timestamp, html) in zipped]
【讨论】:
Enumerate 将为您提供列表中每个项目的 (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>')]
更多信息请参见more_itertools docs。
【讨论】: