अजगर जेन्सन को केवल पहले स्तर की चाबियाँ मिलती हैं


81

मेरे पास बहुत लंबी और जटिल जसन ऑब्जेक्ट है लेकिन मैं केवल पहले स्तर में आइटम / कुंजी प्राप्त करना चाहता हूं!

उदाहरण:

{
    "1": "a", 
    "3": "b", 
    "8": {
        "12": "c", 
        "25": "d"
    }
}

मैं परिणाम के रूप में 1,3,8 प्राप्त करना चाहता हूं !

मुझे यह कोड मिला:

for key, value in data.iteritems():
    print key, value

लेकिन यह सभी कुंजियों को प्रिंट करता है ( 12 और 25 को भी )


5
नहीं, यह नहीं है। यह कुंजी को प्रिंट करता है, और वे मूल्य जो स्वयं उप-शब्दकोशों में शामिल हैं। यदि आप केवल कुंजी प्रिंट करना चाहते हैं, तो मूल्य प्रिंट न करें।
डैनियल रोज़मैन


1
लेकिन मुझे उप-कुंजी कुंजियाँ नहीं चाहिए ... मुझे पता है कि मैं "" का मान रख सकता हूं, यह सिर्फ डिबगिंग उद्देश्य के लिए था
TeNNoX

जवाबों:


133

बस एक सरल करते हैं .keys()

>>> dct = {
...     "1": "a", 
...     "3": "b", 
...     "8": {
...         "12": "c", 
...         "25": "d"
...     }
... }
>>> 
>>> dct.keys()
['1', '8', '3']
>>> for key in dct.keys(): print key
...
1
8
3
>>>

यदि आपको क्रमबद्ध सूची चाहिए:

keylist = dct.keys()
keylist.sort()

@Kikikr आउटपुट को 1, 3, 8.12, 8.25 के रूप में कैसे प्राप्त करें। मूल रूप से मैं चाहता हूं कि आउटपुट में कुछ सीमांकक द्वारा माता-पिता और बच्चे की चाबियाँ अलग हों
जेकेसी


3

जैसा कि कार्तिक ने उल्लेख किया है, dct.keys()काम करेगा लेकिन यह सभी dict_keysप्रकारों को टाइप में नहीं लौटाएगा list। इसलिए यदि आप एक सूची में सभी कुंजी चाहते हैं, तो list(dct.keys())काम करेगा।


1

यह जांचने का एक अच्छा तरीका है कि क्या एक अजगर वस्तु एक प्रकार का उदाहरण है, isinstance()जिसका उपयोग करना है, जो पायथन का 'बिल्ट-इन' फ़ंक्शन है। पायथन 3.6 के लिए:

dct = {
       "1": "a", 
       "3": "b", 
       "8": {
            "12": "c", 
            "25": "d"
           }
      }

for key in dct.keys():
    if isinstance(dct[key], dict)== False:
       print(key, dct[key])
#shows:
# 1 a
# 3 b
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.