2011-03-12 7 views
8

私はHTML要素でいっぱいのリストを持っています。また、HTMLリストに並行する日付/時刻でいっぱいのリストもあります。Python:並行リストでリストをソート

時刻/日付リストに基づいてHTMLリストを並べ替えるにはどうすればよいですか?時間/日付はタイムスタンプ形式です。

答えて

15

あなたはzipを使用することができます。

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

結果は2つのタプルになり、必要に応じてリストに変換できます。

+0

どのように私は 'ソート'について知りませんでしたか?ありがとう! – Thomas

+0

@トーマス - 悪くないでください! '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を参照してください。

関連する問題