Python循环添加到字典

8

当我运行循环时,这个函数应该在字典"电话簿"中添加一个名称和号码,但出于某种原因我无法使其工作。您有任何想法吗?非常感谢!

 phoneBook = dict()
    def addNumber(name, number):
        for i in phoneBook:
            if i == name:
                print 'error'
            else:
                phoneBook[name] = number
2个回答

18

实际上,您根本不需要循环,只需使用in关键字检查名称是否与字典中现有的键匹配。

phoneBook = dict()
def addNumber(name, number):
    if name in phoneBook:
        print 'error'
    else:
        phoneBook[name] = number

因为即使该数字存在,它只会在与该键进行比较时匹配,所有其他键都不会匹配“name”,因此它将覆盖“name”的现有值。更糟糕的是,由于同样的原因,它将N次覆盖该值(其中N是键的数量)。 - Cory Kramer

8
为什么要费心呢?
people = ((data["name"],data["number"]) for data in json.loads(some_list)[::-1])
phoneBook = dict(people)

这将会逆序遍历列表,因此名字的第一次出现将被存储在字典中。
检查的时间比只插入它长...即使最终被覆盖了。
然而,回答你的问题,你原来的代码不起作用是因为你的else语句在for循环内部,实质上是在添加条目时,如果书中的任何名称都不匹配插入的名称,则会添加该条目。
你可以很容易地修复它,当找到匹配项时退出函数...并且在检查所有名称之前不将名称添加到字典中。
phoneBook = dict()
def addNumber(name, number):
    for i in phoneBook:
        if i == name:
            print 'error'
            return
    phoneBook[name] = number

addNumber("james",56)
addNumber("Tommy",26)
addNumber("james",77)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接