2010-04-07 12 views
9
[{'date': '2010-04-01', 'people': 1047, 'hits': 4522}, {'date': '2010-04-03', 'people': 617, 'hits': 2582}, {'date': '2010-04-02', 'people': 736, 'hits': 3277}] 

मान लीजिए कि मेरे पास यह सूची है। मैं "दिनांक" द्वारा क्रमबद्ध कैसे करूं, जो शब्दकोश में एक वस्तु है। लेकिन, "तिथि" एक स्ट्रिंगमेरी तिथि स्ट्रिंग में है, तो मैं इस सूची को पायथन में कैसे क्रमबद्ध करूं?

उत्तर

23
.sort(key=lambda x: datetime.datetime.strptime(x['date'], '%Y-%m-%d')) 
+1

इस अच्छा लग रहा है, लेकिन मैं मिल गया जब मैंने कोशिश की तो जवाब के लिए "कोई नहीं"! –

+7

अधिकांश 'सूची' विधियां सूची लौटने की बजाय, जगह-जगह पर काम करती हैं। –

+2

मुझे इस उत्तर की लचीलापन पसंद है। मेरे मामले में, मुझे '% एम /% डी /% वाई' का सहारा लेना पड़ा। – Wok

2
records = [ 
    {'date': '2010-04-01', 'people': 1047, 'hits': 4522}, 
    {'date': '2010-04-03', 'people': 617, 'hits': 2582}, 
    {'date': '2010-04-02', 'people': 736, 'hits': 3277} 
    ] 
records.sort(key=lambda x: x['date'].split('-')) 
+0

ध्यान दें कि दिनांक शून्य नहीं होने पर यह प्रकार काम नहीं करेगा। उदाहरण के लिए, उदाहरण 2-1 10-1 के बाद आएगा, भले ही फरवरी अक्टूबर से पहले आए। बचाव के लिए –

19

सौभाग्य है ..., आईएसओ प्रारूप की तारीख, जिसे आप यहां क्या हो रहा है, तरह पूरी तरह से अच्छी तरह से तार के रूप में!

import operator 
yourlistofdicts.sort(key=operator.itemgetter('date')) 
+0

'ऑपरेटर '!! – jathanism

+2

बीटीडब्ल्यू, मैं पूरी तरह से यह काम करना चाहता हूं लेकिन यह मेरे लिए w/Py2.6.2 और ओपी से इनपुट सूची के लिए काम नहीं कर रहा है। यह 'TypeError देता है: itemgetter अपेक्षित 1 तर्क, 2 मिल गया। यदि मैं इसे 'क्रमबद्ध' का उपयोग करके चलाता हूं तो यह काम करता है: 'क्रमबद्ध (yourlistofdicts, key = operator.itemgetter (' date ')) '। विचार? – jathanism

+2

ओह, टाइपो: मुझे 'कुंजी =' याद आया, ठीक करने के लिए संपादन, धन्यवाद। –

3

अजगर 2.6 में आप soerted डब्ल्यू/operator.itemgetter उपयोग कर सकते हैं: तो आप कल्पना कुछ भी नहीं की जरूरत है। तारीख के बाद से YYYY-MM-DD तो यह और भी इसकी एक स्ट्रिंग छोटी से छोटी करने के लिए अपने सबसे बड़े कारण हालांकि क्रमबद्ध हो जाता है है - मैं का उपयोग इस कारण

>>> import operator 
>>> l = [{'date': '2010-04-01','people': 1047, 'hits': 4522}, 
     {'date': '2010-04-03', 'people': 617, 'hits': 2582}, 
     {'date': '2010-04-02', 'people': 736, 'hits': 3277}] 
>>> sorted(l, key = operator.itemgetter('date')) 
[{'date': '2010-04-01', 'hits': 4522, 'people': 1047}, {'date': '2010-04-02', 'hits': 3277, 'people': 736}, {'date': '2010-04-03', 'hits': 2582, 'people': 617}] 
11

Satoru.Logic के समाधान स्वच्छ और सरल है के लिए उस प्रारूप हर समय। लेकिन, एलेक्स के प्रति पोस्ट, आप दिनांक स्ट्रिंग हेरफेर करने के लिए सॉर्ट क्रम सही प्राप्त करने की आवश्यकता नहीं है ... इसलिए .split('-')

खोना इस कोड को पर्याप्त होगा:

records.sort(key=lambda x:x['date']) 
+1

... और एक बार फिर सबसे सरल, सबसे पाइथोनिक, और सही उत्तर तत्काल ब्रश किया जाता है जब पूछताछ बहुत जल्दी * sighs * है। –

+0

सादगी के लिए उपरोक्त, लेकिन निश्चित रूप से YYYY-MM-DD प्रारूप में होने वाली तिथियों की आवश्यकता होती है (जो इसलिए स्ट्रिंग के समान ही क्रमबद्ध होती है)। – dkamins

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