Python Function doesn't returns correct value while calling from for loop

Question:

Ok guys I have this following Python script

myDict = {
    "a":1,
    "b":2,
    "c":3
}


def get_ky(val):
    for key, value in myDict.items():
        if val == value:
            return key
        else:
            return "no match"


myList = [1,2,3]


for i in myList:
    print(get_ky(i))

and got this result

a
no match
no match

I want to know why it printed correct result at first iteration and "no match" at the consecutive iteration. please help me to understand this. Also this my first question, if I got something wrong please don’t kill me.

Asked By: Nayan

||

Answers:

You want to use else on the for loop:

myDict = {"a": 1, "b": 2, "c": 3}


def get_ky(val):
    for key, value in myDict.items():
        if val == value:
            return key
    else:
        return "no match"


myList = [1, 2, 3, 4]

for i in myList:
    print(get_ky(i))

Out:

a
b
c
no match
Answered By: Maurice Meyer

The reason why it is not working for you:

Step 1: when you pass the i=1, then it checks the 1==1, which is true and returns the key a

Step 2: When you send i=2, then it checks the 2==1 which is false so it will jump to the else block and return "no match"(here it will not iterate for other values of the myDict)

Step 2: Same thing is happening here also like Step 2.

So you need to do it this way, if it is not matched after the whole myDict then return "no match"

myDict = {
    "a":1,
    "b":2,
    "c":3
}


def get_ky(val):
    for key, value in myDict.items():
        if val == value:
            return key
    return "no match"

myList = [1,2,3]

for i in myList:
    print(get_ky(i))

You can also visualize yourself what is happening behind the scene step by step here at pythontutor.com

Answered By: Always Sunny
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.