2012-11-20 12 views
10

उदाहरण में एक शब्दकोश परिवर्तित:एक सूची

something = { 
    "1": { 
     "2": { 
      "3": { 
       "4": {}, 
       "5": {}, 
       "7": {}, 
       }, 
      "8": { 
       "9": {}, 
       "10": {} 
      }, 
      "11": { 
       "12": { 
        "13": { 
         "14": { 
          "15": { 
           "16": { 
            "17": { 
             "18": {} 
            } 
           } 
          } 
         } 
        } 
       } 
      } 
     } 
    } 
} 

मैं इस तरह मदों की एक सूची के लिए इस शब्दकोश कन्वर्ट करने के लिए कोशिश कर रहा हूँ:

['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18'] 

मैं क्या विधि का उपयोग करना चाहिए?

मैं पहले से ही something.items() कोशिश की, लेकिन मैं क्या वापस मिल गया था:

[('1', {'2': {'11': {'12': {'13': {'14': {'15': {'16': {'17': {'18': {}}}}}}}}, '8': {'9': {}, '10': {}}, '3': {'5': {}, '4': {}, '7': {}}}})] 

यह मेरा पहला यहाँ पोस्ट कर रहा है, तो अगर मैंने कुछ गलत किया है तो कृपया मुझे बताएं।

अजीब पोस्ट के लिए धन्यवाद और खेद है।

+1

तो आप प्रक्रिया में किसी भी डुप्लीकेट को छोड़कर, कई नेस्टेड शब्दकोशों की चाबियों से * क्रमबद्ध * सूची चाहते हैं। क्या यह इसके बारे में है? – 0xC0000022L

उत्तर

6
something = {'1': {'2': {'11': {'12': {'13': {'14': {'15': {'16': {'17': {'18': {}}}}}}}}, '3': {'4': {}, '5': {}, '7': {}}, '8': {'10': {}, '9': {}}}}} 
a = [] 

def flatten(d,a): 
    for k,v in d.items(): 
     a.append(k) 
     flatten(v, a) 
flatten(something, a) 

# a == ['1', '2', '11', '12', '13', '14', '15', '16', '17', '18', '8', '9', '10', '3', '5', '4', '7']" 
24

आप अपने संरचना समतल एक समारोह का उपयोग करना होगा:

def flatten(d): 
    for key, value in d.iteritems(): 
     yield key 
     for sub in flatten(value): 
      yield sub 

(.iteritems() अगर आप अजगर 3 का उपयोग कर रहे .items() साथ प्रतिस्थापित किया जाना चाहिए)।

अजगर 3.3 और नए पर, आप भी नए yield from syntax उपयोग कर सकते हैं:

def flatten(d): 
    for key, value in d.items(): 
     yield key 
     yield from flatten(value) 

यह रिकर्सिवली सभी कुंजियों निकलेगा। चालू करने के लिए है कि एक सूची उपयोग में:

list(flatten(elements)) 

के बाद से अजगर शब्दकोशों अव्यवस्थित कर रहे हैं, कुंजी लौटे के आदेश अनुसार क्रमबद्ध करने के लिए नहीं जा रहा है। यदि आप अपनी चाबियाँ एक विशिष्ट ऑर्डरिंग चाहते हैं तो आपको परिणाम को स्पष्ट रूप से सॉर्ट करना होगा।

+0

+1, 'उपज' फ़ंक्शन को पतला बनाता है। – eumiro

+0

बहुत बहुत धन्यवाद, यह काम किया। – Neox

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