2011-11-21 45 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

我手頭沒有python,你可以用'four'而不是'one'重新運行測試嗎? – soulcheck

+0

@soulcheck - 檢查我的第二個編輯! :0 – mac

+2

畢竟它並不是必須的,除非在更大的字典上運行。我猜在values()中的開銷是由複製值列表引起的,而viewvalues()是通過維持活動視圖引起的。 – soulcheck

23

您可以使用

"one" in d.itervalues() 

來測試是否"one"是你的字典的值之間。

+0

@SvenMaramach很顯然,它看起來值,但你會怎麼看鑰匙?它可以應用於鍵嗎? – cbbcbail

+2

@cbbcbail:爲了測試'd'的鍵是否出現''one'',只需在d'中使用''one''。 –

+0

如何檢查某個鍵是否包含值? (爲了避免重複) – jester112358

8

使用字典視圖:

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

Python字典有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 

如果你的關鍵是nt存在,將返回none值。

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

相關的內容小於3.0和大於5.0的版本。 。

+6

不回答問題。 OP詢問'key:value'中的值,而不是key。 – akshaynagpal