2013-11-15 3 views
1

Я создаю диктофон для хранения имени и номера телефона, хранящегося на локальном рассоле. вопрос теперь я столкнулся: похоже, что слияние не работает нормально. , любая идея? Благодарю.Python 2 dicts merge

import pickle 
def add(name,contact): 
    person= {}; 
    person[name] = contact; 
    print('new added: ',person); 

    mycontactfile = 'contactlist.txt'; 
    f = open(mycontactfile,'rb'); 
    storedcontact = pickle.load(f); 
    f.close(); 
    print('saved list:',storedcontact); 

    storedcontact.update(person); # add a new contact to the list 

    f = open(mycontactfile,'wb'); 
    pickle.dump(storedcontact,f); 

    print('now full list is:' ,storedcontact); 
+4

Просто предложение, вы не должны использовать ',' чтобы указать конец линии, как и в C или C++ – thefourtheye

+0

возможного дубликат [Как я могу объединить (союз) два Dictiona Python ries в одном выражении?] (http://stackoverflow.com/questions/38987/how-can-i-merge-union-two-python-dictionaries-in-a-single-expression) – aIKid

+1

Я нашел причину, person и storedcontact имеет один и тот же ключ, поэтому вывод показывает только один. спасибо всем, хотя – user2986226

ответ

0

Если у вас есть несколько контактов, чтобы идти с именем, вы будете нуждаться в dict из list. Вы бы добавить контакты, как это

if name in storedcontact: 
    storedcontact.append(contact) 
else: 
    storedcontact[name] = contact 

еще лучше, прекратить использование соленья и переключиться на sqlite

Помимо: вы можете также инициализирует person в одном шаге, как это (но на самом деле не нужно больше person)

person = {name: contact} 
Смежные вопросы