2014-10-08 110 views
2

当我运行循环时,该函数应该为字典'phoneBook'添加名称和编号,但出于某种原因,我无法使其工作。任何想法为什么不呢?非常感谢!Python添加到词典循环

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

回答

9

你并不真正需要的循环可言,你可以只使用in关键字查询名字对在字典中的现有密钥。

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

哦好吧谢谢!为什么它不与循环一起工作? – bugsyb 2014-10-08 18:21:50

+0

因为即使数字存在,只有当它与该键相比时,它才会匹配,所有其他键都不会与'name'匹配,因此它会覆盖现有的'name'值。更糟糕的是,出于同样的原因,它会将该值重写N次(其中N是键的数量)。 – CoryKramer 2014-10-08 18:28:51

4

何苦

people = ((data["name"],data["number"]) for data in json.loads(some_list)[::-1]) 
phoneBook = dict(people) 

这会以相反的顺序在列表中运行,这样的名字第一次出现将是一个存储在字典

需要更长的时间来检查比只是插入它...即使它结束写过

回答你的问题然而

你原来的代码没有工作,因为你还有就是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)