2011-11-21 12 views
153

मैं अजगर में निम्नलिखित शब्दकोश:अगर एक मूल्य के एक शब्दकोश (अजगर) में मौजूद है कैसे की जाँच करने के

d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'} 

मैं एक तरह से की जरूरत है एक मूल्य के रूप में "एक" या "दो" मौजूद है खोजने के लिए इस शब्दकोश में।

उदाहरण के लिए, अगर मैं जानना चाहता था अगर सूचकांक "1" अस्तित्व में मैं बस टाइप करना होगा:

"1" in d 

और फिर अजगर मुझे बताओ कि अगर सही या गलत है, लेकिन मैं करने की जरूरत है यह मानने के अलावा कि कोई मान मौजूद है, वही सटीक चीज़ करें।

उत्तर

237
>>> d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'} 
>>> 'one' in d.values() 
True 
जिज्ञासा से बाहर

, कुछ तुलनात्मक समय:

>>> T(lambda : 'one' in d.itervalues()).repeat() 
[0.28107285499572754, 0.29107213020324707, 0.27941107749938965] 
>>> T(lambda : 'one' in d.values()).repeat() 
[0.38303399085998535, 0.37257885932922363, 0.37096405029296875] 
>>> T(lambda : 'one' in d.viewvalues()).repeat() 
[0.32004380226135254, 0.31716084480285645, 0.3171098232269287] 

संपादित करें: और मामले आपको आश्चर्य में क्यों ... कारण यह है कि इसके बाद के संस्करण की प्रत्येक वस्तु के एक अलग प्रकार का रिटर्न है, या अच्छी तरह से देखने के संचालन के लिए उपयुक्त है जो हो सकता है नहीं किया जा सकता:

>>> type(d.viewvalues()) 
<type 'dict_values'> 
>>> type(d.values()) 
<type 'list'> 
>>> type(d.itervalues()) 
<type 'dictionary-valueiterator'> 

EDIT2: अनुरोध के अनुसार टिप्पणी में ...

>>> T(lambda : 'four' in d.itervalues()).repeat() 
[0.41178202629089355, 0.3959040641784668, 0.3970959186553955] 
>>> T(lambda : 'four' in d.values()).repeat() 
[0.4631338119506836, 0.43541407585144043, 0.4359898567199707] 
>>> T(lambda : 'four' in d.viewvalues()).repeat() 
[0.43414998054504395, 0.4213531017303467, 0.41684913635253906] 
+0

मेरे पास हाथ में कोई अजगर नहीं है, क्या आप 'एक' के बजाय 'चार' के साथ परीक्षण फिर से कर सकते हैं? – soulcheck

+0

@ सोल्चेक - मेरा दूसरा संपादन देखें! : o – mac

+2

यह सब के बाद necesarry नहीं था, जब तक कि बड़े नियम पर चलाने के लिए नहीं। मुझे लगता है कि मूल्यों में ओवरहेड() मूल्य को जीवित रखने के द्वारा मूल्य सूची और दृष्टिकोण() में प्रतिलिपि बनाकर होता है। – soulcheck

23

आप

"one" in d.itervalues() 

का उपयोग करता है, तो "one" अपने शब्दकोश के मूल्यों में से एक है परीक्षण करने के लिए कर सकते हैं।

+0

@SvenMaramach जाहिर है, यह मानों को देखता है, लेकिन आप कुंजी को कैसे देखेंगे? क्या इसे चाबियों पर लागू किया जा सकता है? – cbbcbail

+2

@cbbcbail: यह जांचने के लिए कि 'd' की कुंजी के बीच' "एक" दिखाई देता है, बस डी में '"एक" का उपयोग करें। –

+0

आप कैसे जांचते हैं कि कुछ कुंजी में कोई मान है या नहीं? (डुप्लिकेट से बचने के लिए) – jester112358

8

उपयोग शब्दकोश विचार:

if x in d.viewvalues(): 
    dosomething().. 
10

अजगर शब्दकोश है get(key) funcion

>>> d.get(key) 

उदाहरण के लिए,

>>> d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'} 
>>> d.get('3') 
'three' 
>>> d.get('10') 
none 

अपने प्रमुख होता है, तो ' एनटी मौजूद है, 01 वापस आ जाएगामूल्य।

foo = d[key] # raise error if key doesn't exist 
foo = d.get(key) # return none if key doesn't exist 

5,0 से अधिक 3.0 से भी कम समय और संस्करणों के लिए प्रासंगिक सामग्री। ।

+6

प्रश्न का उत्तर नहीं देता है। ओपी ने 'कुंजी: मान' के रूप में एक मान के बारे में पूछा और कुंजी नहीं। – akshaynagpal