2011-11-07 11 views
37

मैं ऑर्डर्ड डिक्ट में ऑर्डर्ड डिक्ट को 'गहराई' कुंजी द्वारा सॉर्ट करने का प्रयास कर रहा हूं। क्या उस शब्दकोश को सॉर्ट करने के लिए कोई समाधान है?ऑर्डर्ड डिक्ट के ऑर्डर्ड डिक्ट को कैसे क्रमबद्ध करें - पायथन

OrderedDict([ 
    (2, OrderedDict([ 
    ('depth', 0), 
    ('height', 51), 
    ('width', 51), 
    ('id', 100) 
    ])), 
    (1, OrderedDict([ 
    ('depth', 2), 
    ('height', 51), 
    ('width', 51), 
    ('id', 55) 
    ])), 
    (0, OrderedDict([ 
    ('depth', 1), 
    ('height', 51), 
    ('width', 51), 
    ('id', 48) 
    ])), 
]) 

छाँटे dict इस तरह दिखना चाहिए:

OrderedDict([ 
    (2, OrderedDict([ 
    ('depth', 0), 
    ('height', 51), 
    ('width', 51), 
    ('id', 100) 
    ])), 
    (0, OrderedDict([ 
    ('depth', 1), 
    ('height', 51), 
    ('width', 51), 
    ('id', 48) 
    ])), 
    (1, OrderedDict([ 
    ('depth', 2), 
    ('height', 51), 
    ('width', 51), 
    ('id', 55) 
    ])), 
]) 

किसी भी विचार कैसे इसे पाने के लिए?

उत्तर

67

OrderedDict के बाद से आपको एक नया निर्माण करना होगा प्रविष्टि आदेश द्वारा क्रमबद्ध किया गया है।

आपके मामले में कोड इस तरह दिखेगा:

foo = OrderedDict(sorted(foo.iteritems(), key=lambda x: x[1]['depth'])) 

अधिक उदाहरण के लिए http://docs.python.org/dev/library/collections.html#ordereddict-examples-and-recipes देखें।

+2

यदि किसी भी निर्देश में कुंजी के रूप में 'गहराई' नहीं है तो यह अपवाद का कारण बन जाएगा। यह वांछित हो सकता है। यदि ऐसा नहीं है, तो आप "प्राप्त करें" का उपयोग करके एक डिफ़ॉल्ट कुंजी मान सकते हैं। – TomOnTime

+5

ध्यान दें कि '[1]' यहां foo के मानों को संदर्भित करता है, क्योंकि इसकी चाबियों के विपरीत, जो '[0] ' – emisilva

15
>>> OrderedDict(sorted(od.items(), key=lambda item: item[1]['depth'])) 
संबंधित मुद्दे