2013-06-07 6 views
5

एक पायथन शब्दकोश और एक पूर्णांक n दिया गया, मुझे n वें कुंजी तक पहुंचने की आवश्यकता है। मुझे अपनी परियोजना में बार-बार ऐसा करने की ज़रूरत है।एक पायथन शब्दकोश में nth कुंजी निकालें?

मैं एक समारोह जो ऐसा करता है लिखा है:

def ix(self,dict,n): 
    count=0 
    for i in sorted(dict.keys()): 
     if n==count: 
      return i 
     else: 
      count+=1 

लेकिन समस्या यह है कि अगर शब्दकोश बहुत बड़ा है, समय जटिलता जब बार-बार इस्तेमाल बढ़ जाती है।

क्या ऐसा करने का कोई प्रभावी तरीका है?

+0

सबसे पहले समकक्ष लेकिन तेज कोड – jamylak

+13

के लिए '.keys() 'को हटा दें, एक अनियंत्रित संग्रह में" nth element "जैसी कोई चीज़ नहीं है। आप मुझे लगता है कि गलत समस्या का phrasing कर रहे हैं। – Elazar

+0

@jamylak हां, धन्यवाद! मुझे नहीं पता था कि .keys() के बिना भी पुनरावृत्ति किया जा सकता है, और क्या मुख्य प्रश्न के लिए कोई समाधान है? –

उत्तर

7

मैं तुम्हें इस तरह कुछ करना चाहता था लगता है, लेकिन dic.keys में चाबियों का आदेश कुछ भी हो सकता इतनी के रूप में शब्दकोश किसी भी क्रम की जरूरत नहीं है:

def ix(self, dic, n): #don't use dict as a variable name 
    try: 
     return list(dic)[n] # or sorted(dic)[n] if you want the keys to be sorted 
    except IndexError: 
     print 'not enough keys' 
+0

'सूची (डीआईसी) 'ठीक काम करता है –

+0

धन्यवाद @ अश्विनी, इसलिए आंतरिक रूप से पाइथन शब्दकोश संस्कार में सभी चाबियों के साथ एक सूची बनाता है? –

+0

@ हेमंतमल्ला नहीं, पाइथन डिक्ट्स हैश टेबल के रूप में लागू किए गए हैं। http://docs.python.org/2/faq/design.html#how-are- शब्दकोश- –

0

शब्दकोश एक असाधारण संग्रह है। तो, कोई पहला, दूसरा या एनएच तत्व नहीं है।

+0

क्या आपने कई बार एक ही रंग को मुद्रित करने का प्रयास किया था? यह हर बार एक ही आदेश है, जब तक कि आप इसे बीच में बदल नहीं रहे हैं। – Elazar

+1

नहीं, एक ही निर्देश मुद्रित (संशोधन के बिना) आदेश को नहीं बदलता है। –

+0

हाँ सही, धन्यवाद – sinhayash

6

dict.keys() तो एक सूची लौटाती है, आप सभी की जरूरत है करने के लिए एक शब्दकोश एक अव्यवस्थित संग्रह इतना वें तत्व इस संदर्भ

+0

कार्यान्वित यह Python3 में एक पुनरावर्तनीय है। – Elazar

+0

ओह ... मुझे वास्तव में इसे अपग्रेड करने की ज़रूरत है, यह दिन के लिए मेरा दूसरा पायथन 3 सुधार है :) – shyam

+2

वास्तव में, '' 'सूची (dict.keys()) [0]' '' '' '' '' ' – raratiru

1

dict.keys() में कोई मतलब नहीं है है dict.keys()[n]

है लेकिन, एक सूची है जिसका अर्थ है आप सरणी का उपयोग कर सकते रिटर्न एक तत्व का उपयोग करने के लिए सूचकांक।

{key: gaGdT[key][1] for key in parSet} 

gaGdT tuples के रूप में जमा मूल्यों के साथ स्रोत शब्दकोश है:

def ix(self, dict, n): 
    if len(dict.keys()) > n: 
     return dict.keys()[n] 
    else: 
     //NOT ENOUGH ELEMENTS 
+1

दरअसल, '' 'सूची (dict.keys()) [n]' '' काम किया – raratiru

-1

इस तरह मैं एक शब्दकोश कुंजी के लिए 2 मान प्राप्त है। parSet अद्वितीय शब्दकोश कुंजी का एक सेट है।

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