Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
137 views
in Technique[技术] by (71.8m points)

python - Iterating over Keys of a dictionary in For and If loop

I have a dictionary which looks like this:

websites = {
    "instagram": f'https://www.instagram.com/{username}',
    "facebook": f'https://www.facebook.com/{username}'
    }

And a For loop for iterating over keys of the dictionary

for key in websites.keys():
    keys = str(key)
    # print(keys)
    if keys == target:
        # print(target)
        # print(keys)
        search_web(username, websites[key])
        break

My search_web function:

def search_web(username, tgt):
    print("search_web is running")
    r = requests.get(tgt)
    print(tgt)
    if r.status_code == 200:
        print('Got it ' + username + ' in ' + tgt)
    elif r.status_code == 400:
        print('Not Found in ' + username + ' at ' + tgt)

This is what the Output looks like:

python search_user.py -u vybhav_72954 -t instagram github


Got it vybhav_72954 in https://www.instagram.com/vybhav_72954
Got it vybhav_72954 in https://www.instagram.com/vybhav_72954
Got it vybhav_72954 in https://www.instagram.com/vybhav_72954
Got it vybhav_72954 in https://www.instagram.com/vybhav_72954
Got it vybhav_72954 in https://www.instagram.com/vybhav_72954
Got it vybhav_72954 in https://www.instagram.com/vybhav_72954
Got it vybhav_72954 in https://www.instagram.com/vybhav_72954
Got it vybhav_72954 in https://www.instagram.com/vybhav_72954
Got it vybhav_72954 in https://www.instagram.com/vybhav_72954
Not Found vybhav_72954 at https://www.github.com/vybhav_72954
Not Found vybhav_72954 at https://www.github.com/vybhav_72954
Not Found vybhav_72954 at https://www.github.com/vybhav_72954
Not Found vybhav_72954 at https://www.github.com/vybhav_72954
Not Found vybhav_72954 at https://www.github.com/vybhav_72954
Not Found vybhav_72954 at https://www.github.com/vybhav_72954

Now I understand what's going on, The Instagram loop is running 9 times, because of 9 literal characters and similarly, Github is running because of 6 literal characters.

I understand that the break statement is used to break out of If loop, once the condition is met, but in this case, rather than breaking the condition we are looping again. I tried changing the position of break and my function call, but still the problem persists, am sure this is a basic mistake, can someone guide me here.

Expected Output:

Got it vybhav_72954 in https://www.instagram.com/vybhav_72954
Not Found vybhav_72954 at https://www.github.com/vybhav_72954

Just in case if it's needed, the argparse function:

def parser_input():
    parser = argparse.ArgumentParser()
    parser.add_argument("-u", "--usernames", help="Enter the username.", type=str, required=True)
    parser.add_argument("-t", "--targets", help="Enter the website(s).", type=str, required=True, nargs='+')

    if len(sys.argv) == 1:
        parser.print_help()
        sys.exit()

    return parser.parse_args()

My main function also has a for loop, which triggers inputs function which contains the for loop, dictionary and the function call to search_web function.

if __name__ == '__main__':
    arg = parser_input()
    # listToStr = ' '.join([str(elem) for elem in arg.targets])
    for i in range(len(arg.targets)):
        for l in arg.targets[i]:
            inputs(arg.usernames, arg.targets[i])

I have used the for loop to run the code separately on the strings contained in list generated by arg.target [as it has nargs='+']

EDIT - Pastebin for Complete code click here

question from:https://stackoverflow.com/questions/66061350/iterating-over-keys-of-a-dictionary-in-for-and-if-loop

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...