python for循环和字典值

-2 python dictionary for-loop

我正在学习python并尝试制作电话簿.相当标准的练习,但我在试图让我的搜索功能通过字典中的每个值时遇到问题.如果有匹配,它只会返回第一个项目,否则它只会返回None,我不确定我做错了什么.

使用python 2.6没有特别的原因.

phonebook = {"id": 1, "fname" : "Mario", "lname": "Mario", "phone": "XXX-XXX-XXXX"}, \
        {"id": 2, "fname" : "Luigi", "lname": "Mario", "phone": "505-123-4567"}

def search_fname(name):
    name = str.capitalize(name)
    for n in phonebook:
        if name == n["fname"]:
            return n["id"]
        else:
            print "No match found."
            return 0

def search():
    name = raw_input("Please enter the first name: ")
    pid = search_fname(name)
    if pid != 0:
        for n in phonebook:
            if n["id"] == pid:
                print n["fname"], n["lname"], n["phone"]
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 5

第一次测试就回来:

for n in phonebook:
    if name == n["fname"]:
        return n["id"]
    else:
        print "No match found."
        return 0
Run Code Online (Sandbox Code Playgroud)

因此,如果电话簿中的第一个条目(绑定)n匹配(如此name = "Mario"),则返回n['id'],否则返回0.for当您退出该功能时,您的循环永远不会在此处迭代电话簿的其余部分.

else完全移除块; 你不会知道,如果没有比赛,直到您已经尝试了所有的条目,所以把你print 以后for循环:

for n in phonebook:
    if name == n["fname"]:
        return n["id"]

print "No match found."
return 0
Run Code Online (Sandbox Code Playgroud)