2014-04-12 37 views
0

删除这是我的代码然后添加在dictonary

def make_directory(): 
    return [] 


def get_number(directory, person): 
    a = dict(directory) 
    if person in a: 
     return a[person] 
    else: 
     return 0 


def add_number(directory, person, number): 
    directory.append((person,number)) 
    return(str(person) + ' ' +'added!')  





def del_number(directory, person): 
    a = dict(directory) 
    if person in a: 
     del a[person] 
     return (str(person) + ' ' +'deleted!') 
    else: 
     return 'Not found!' 



def print_list(directory): 
    print(directory) 
phonebook = make_directory() 
add_number(phonebook, 'Police', 999) 
add_number(phonebook, 'Lynna', 8444) 
add_number(phonebook, 'Jack', 1123) 
add_number(phonebook, 'Sister', 5720) 
print(get_number(phonebook, 'Jack')) 
print(add_number(phonebook, 'Alex', 6346)) 
print(del_number(phonebook, 'Alex')) 

当我尝试print(print_list(phonebook))我得到[('Police', 999), ('Lynna', 8444), ('Jack', 1123), ('Sister', 5720), ('Alex', 6346)]而不是[('Jack', 1123), ('Lynna', 8444), ('Police', 999), ('Sister', 5720)]

为什么del_number()函数调用不能删除'Alex'

+0

你能解释一下你正在做什么吗? –

+1

@sjcipher:建立一个电话号码簿,添加名字和删除名字。但删除失败。 –

+0

致密选民:如何不理解列表与由该列表创建的字典之间的关系“简单的印刷错误”?发布代码中的问题肯定会被重现,所以CV似乎完全错位。 –

回答

2

del_number()功能把列表转换成一个字典,那么只会从字典中的人,原来directory列表不受影响:

def del_number(directory, person): 
    a = dict(directory) 
    if person in a: 
     del a[person] 

你需要改变directory代替;你可以使用list.remove()一旦你找到数:

def del_number(directory, person): 
    a = dict(directory) 
    if person in a: 
     directory.remove((person, a[person])) 
     return (str(person) + ' ' +'deleted!') 
    else: 
     return 'Not found!' 

这将是一个更容易做,如果你directory是一本字典,开始有:

def make_directory(): 
    return {} 

def add_number(directory, person, number): 
    directory[person] = number 
    return(str(person) + ' ' +'added!')  

并删除dict()电话你的其他功能:

def del_number(directory, person): 
    if person in directory: 
     del directory[person] 
     return (str(person) + ' ' +'deleted!') 
    else: 
     return 'Not found!' 

使用字典,然后让你做这样的事情:

def get_number(directory, person): 
    return directory.get(person, 0) 

例如如果在字典中找不到person,则返回默认值。