Создание телефонной книги на python: я хочу получить этот экран, исправив мой текущий код
Я сделал свой код, как показано ниже....
Но при вводе данных, таких как спам и номер, предыдущие данные удаляются.
Так что я хотел бы сделать несколько значений в одном ключе... (я думаю, использование списка это хороший метод)
Например,
Ключ: спам - Значение: 01012341111, 01099991234,
Ключ: спам - Значение: 01032938962, 01023421232, 01023124242
введите описание изображения здесь
В итоге, я хочу получить эту печать (прилагается изображение)
это мой код:
enter code here
phonebook = dict()
ntype = ['spam', 'friend', 'family', 'etc']
trash =[]
spam = []
friend = []
family = []
etc = []
while True:
a = input("Input your number and ntype : ")
b = a.split()
i = 0
j = 0
if a == 'exit':
print("end program")
break
exit()
elif a == "print spam":
print("*** spam numbers: ")
print('*', phonebook['spam'])
elif a == "print numbers":
print("*** numbers:")
for t in ntype:
try:
print("**", t)
print('*',phonebook[t])
except KeyError:
continue
print("** trash")
print("*", phonebook['trash'])
else:
while True:
try:
if ntype[j] in b:
for k in b:
if list(k)[0] == '0' and len(k) >= 10 and len(k) <= 11:
if k in phonebook.values():
print("Already Registered")
else:
phonebook[ntype[j]] = k
print(phonebook)
break
else:
j+=1
except IndexError:
if list(b[i])[0] == '0' and len(b[i]) >= 10 and len(b[i]) <= 11:
if b[i] in phonebook.values():
print("Already Registered")
else:
phonebook['trash'] = b[i]
print(phonebook)
break
else:
break
1 ответ
Вы должны использовать список для этого. Проблема в том, что вы не можете добавить значение, которое еще не было установлено.
>>> d = {}
>>> d['a'].append('value')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'a'
И, как вы видели, назначение нескольких раз одной и той же клавише не поможет.
>>> d = {}
>>> d['a'] = 'value1'
>>> d['a'] = 'value2'
>>> d
{'a': 'value2'}
Итак, чтобы заставить его работать, вы можете инициализировать все возможные ключи с пустым списком:
>>> d = {}
>>> possible_keys = ['a', 'b']
>>> for k in possible_keys:
... d[k] = []
...
>>> d['a'].append('value1')
>>> d['a'].append('value2')
>>> d['b'].append('value3')
>>> d['b'].append('value4')
>>> d
{'b': ['value3', 'value4'], 'a': ['value1', 'value2']}
Это работает, но это просто утомительно. Инициализация dicts является очень распространенным случаем, поэтому метод был добавлен в dict
добавить значение по умолчанию, если оно еще не установлено:
>>> d = {}
>>> d.setdefault('a', []).append('value1')
>>> d.setdefault('a', []).append('value2')
>>> d.setdefault('b', []).append('value3')
>>> d.setdefault('b', []).append('value4')
>>> d
{'b': ['value3', 'value4'], 'a': ['value1', 'value2']}
Но опять же, вы должны были бы не забыть позвонить setdefault
каждый раз. Чтобы решить эту проблему, библиотека по умолчанию предлагает defaultdict
,
>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> d['a'].append('value1')
>>> d['a'].append('value2')
>>> d['b'].append('value3')
>>> d['b'].append('value4')
>>> d['a']
['value1', 'value2']
>>> d['b']
['value3', 'value4']
Который может быть просто то, что вам нужно.
Надеюсь, я смогу помочь.;)