2015-01-11 59 views
4

我如何通過整個循環運行,然後去else語句後,如果if條件爲假檢查整個循環?的Python纔去else語句

輸出是:

沒有

沒有

但我只希望它跳轉到else語句,如果所有的值不等於!

test_1 = (255, 200, 100) 
test_2 = (200, 200, 100) 
test_3 = (500, 50, 200) 

dict = {"test_1":test_1, 
     "test_2":test_2, 
     "test_3":test_3} 


for item in dict: 
    if dict[item] == (500, 50, 200): 
     print('Yes') 
    else: 
     print('No') 

基本上輸出應該說,因爲其中的一個值是真的。

+0

FWIW,你的問題似乎已經從'我如何檢查字典是否包含值?'改變了。到'如何提取與字典中的值關聯的密鑰,如果存在?'。如果這是正確的,請參閱http:// stackoverflow。com/questions/8023306/get-key-by-value-in-dictionary – zehnpaard

回答

7

你需要運行循環,直到你找到一個matche。您可以使用any功能用於此目的,像這樣

if any(dict_object[key] == (500, 50, 200) for key in dict_object): 
    print('Yes') 
else: 
    print('No') 

我們通過發電機表達any功能。生成器表達式從字典中獲取每個項目,並檢查它是否等於(500, 50, 200)。一旦發現匹配,any將立即返回True,其餘迭代甚至不會發生。如果沒有項目的匹配(500, 50, 200)any將返回FalseNo將被打印出來。


編輯:在聊天的OP經過長時間的討論,他其實想知道它匹配以及該項目。因此,較好的解決辦法是去與for..else像由NPE對方的回答,這樣

for key in dict_object: 
    if key.startswith('test_') and dict_object[key] == (500, 50, 200): 
     # Make use of `dict_object[key]` and `key` here 
     break 
else: 
    print('No matches') 
+0

乾淨簡單,一個很好的答案! :) – ladislas

+0

同意,謝謝! – Frederik

+0

使用這種方法,我將如何打印(項目),因爲它顯然沒有被引用? – Frederik

4

但我只希望它跳轉到else語句,如果所有的值不等於!

Python的for - else結構可以用來做正是:

for item in dict: 
    if dict[item] == (500, 50, 200): 
     print('Yes') 
     break 
else: 
    print('No') 

如需進一步討論,請參見Why does python use 'else' after for and while loops?

然而,在這種特定情況下,我不會使用顯式循環的全部:

print ("Yes" if (500, 50, 200) in dict.values() else "No") 
1

也許使用in運營商:

item_appears_in_dict = item in dict.values() 
print "Yes" if item_appears_in_dict else "No" 
+1

因爲它會引發語法錯誤,所以第二行中的第二個'print'不應該在那裏,因爲三元運算符允許表達式但不包含語句 – zehnpaard

+0

Thanks @zehnpaard – shevski