2011-03-12 15 views
8

我有一个用HTML元素填充的列表。我也有一个填充日期/时间的列表,它与HTML列表平行。Python:使用并行列表排序列表

如何根据时间/日期列表对HTML列表进行排序?时间/日期是时间戳格式。

回答

15

您可以使用zip

timestamps, elements = zip(*sorted(zip(timestamps, elements))) 

结果将是两个元组,如果您愿意,可以将其转换为列表。

+0

我怎么不知道'sorted'?谢谢! – Thomas

+0

@Thomas - 别难过! 'sort()'就地,而sorted()'创建一个新列表,所以'sort()'它通常是你想要的大列表。 :-) –

+0

谢谢。向后呢? – Zeno

7

邮编两个列表成元组,排序,然后把HTML背出元组:

zipped = zip(timestamps, htmls) 
zipped.sort() 
sorted_htmls = [html for (timestamp, html) in zipped] 
2

枚举将为您提供列表中每个项目的(索引,项目)元组列表。您可以使用索引对其进行排序,以从时间戳列表中读取排序关键字。然后剥离html元素:

sorted_elems = [elem for i,elem in sorted(enumerate(html_elements), 
              key=lambda x:timestamps[x[0]])] 

什么可能会更简单?

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