How do I run through the whole loop and then after go to else statement, if the if condition is false?
The output is:
No
No
Yes
But I only want it to jump to the else statement if all of the values does not equal!
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')
So basicly the output should say, because one of the values was true.
Yes
You need to run the loop until you find a matche. You can use any function for this purpose, like this
if any(dict_object[key] == (500, 50, 200) for key in dict_object):
print('Yes')
else:
print('No')
We pass a generator expression to any function. The generator expression takes each and every item from the dict and checks if it is equal to (500, 50, 200). The moment it finds a match, the any will return True immediately and the rest of the iterations will not even take place. If none of the items match (500, 50, 200), any will return False and the No will be printed.
Edit: After a lengthy discussion with the OP in the chat, he actually wanted to know the item which matches as well. So, the better solution would be to go with for..else like in the other answer by NPE, like this
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')
But I only want it to jump to the else statement if all of the values does not equal!
Python's for-else construct can be used to do exactly that:
for item in dict:
if dict[item] == (500, 50, 200):
print('Yes')
break
else:
print('No')
For further discussion, see Why does python use 'else' after for and while loops?
However, in this particular instance I would not use an explicit loop at all:
print ("Yes" if (500, 50, 200) in dict.values() else "No")
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With