मेरे पास शब्दकोशों की एक सूची है, प्रत्येक शब्दकोश में एक तिथि (datetime.datetime ऑब्जेक्ट) है, लेकिन कुछ मामलों में यह कुंजी "created_at" और अन्य मामलों में "notification_timestamp" से जुड़ा है।

data = [{'foo':'bar', 'created_at':'00:15:20 04/05/2019'},{'foo2':'bar2', 'notification_timestamp':'00:35:20 04/05/2019'}]

मुझे पता है कि मैं सिर्फ चाबियों का नाम बदल सकता हूं लेकिन मुझे इन चाबियों द्वारा इस सूची को ऑर्डर करने के लिए एक कुशल/स्केलेबल समाधान की आवश्यकता है।

मैंने data = data.sort(key=operator.itemgetter("created_at", "notification_timestamp"), reverse=True) की कोशिश की है लेकिन यह निम्न त्रुटि फेंकता है:

Exception Type: KeyError at /v1/my_script
Exception Value: 'notification_timestamp'

शायद इसलिए कि सभी शब्दकोशों में यह कुंजी नहीं है।

मैं अपने चर के डेटा प्रकारों के बारे में निश्चित हूं, इस स्क्रिप्ट का आउटपुट

for d in data:
    if d.get("created_at", False):         
        print("CREATED AT TYPE: ", type(d.get("created_at")))
    if d.get("notification_timestamp", False):
        print("notification_timestamp TYPE: ", type(d.get("notification_timestamp")))

है

CREATED AT TYPE:  <class 'datetime.datetime'>
notification_timestamp TYPE:  <class 'datetime.datetime'>

सभी मदद की सराहना की जाती है

0
Jessica Chambers 16 जुलाई 2019, 13:09

2 जवाब

सबसे बढ़िया उत्तर

dict.get का उपयोग करके देखें

उदा:

data = [{'foo':'bar', 'created_at':'00:15:20 04/05/2019'},{'foo2':'bar2', 'notification_timestamp':'00:35:20 04/05/2019'}]
data.sort(key=lambda x: x.get("created_at", x.get("notification_timestamp")))  #Thanks AbdulNiyasPM & h4z3
print(data)
-1
Rakesh 16 जुलाई 2019, 13:32

मुझे इस परिस्थिति में x.get() का उपयोग करने की संभावना दिखाने के लिए @Rakesh का धन्यवाद, मुझे एक समाधान मिला:

data.sort(key=lambda x: x.get("created_at", x.get("notification_timestamp", None)), reverse=True)

1
Jessica Chambers 16 जुलाई 2019, 13:29