2011-03-12 18 views
8

मेरे पास एक सूची है जो HTML तत्वों से भरी हुई है। मेरे पास दिनांक/समय से भरा एक सूची भी है, जो HTML सूची के समानांतर है।पायथन: समानांतर सूची के साथ क्रमबद्ध सूची

मैं समय/दिनांक सूची के आधार पर HTML सूची को कैसे क्रमबद्ध कर सकता हूं? समय/दिनांक एक टाइमस्टैम्प प्रारूप में है।

उत्तर

15

आप zip उपयोग कर सकते हैं।

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

परिणाम दो टुपल्स होंगे जिन्हें आप पसंद करते हैं तो आप सूची में परिवर्तित कर सकते हैं।

+0

मुझे 'क्रमबद्ध' के बारे में कैसे पता नहीं था ?! धन्यवाद! – Thomas

+0

@ थॉमस - बुरा मत मानो! 'sort() 'जगह में है, जबकि' क्रमबद्ध() 'एक नई सूची बनाता है, इसलिए' क्रमबद्ध करें) 'आमतौर पर यह वही है जो आप बड़ी सूची के लिए चाहते हैं। :-) –

+0

धन्यवाद। पीछे की ओर क्या? – Zeno

7

tuples में दो सूचियों ज़िप, प्रकार, तो टपल से बाहर वापस एचटीएमएल ले:

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

एन्युमरेट आपको सूची में प्रत्येक आइटम के लिए (अनुक्रमणिका, आइटम) tuples की एक सूची देगा। आप टाइमस्टैम्प सूची से सॉर्ट कुंजी पढ़ने के लिए इंडेक्स का उपयोग करके इसे सॉर्ट कर सकते हैं। फिर एचटीएमएल तत्वों को छील दें:

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 देखें।

संबंधित मुद्दे