用python制作电话簿:我想通过修复当前代码来获取此屏幕 [英] Making Phonebook in python : i want to get this screen by fixing my current code
问题描述
我使代码如下所示....
I made my code like below....
但是,当我输入垃圾邮件等数据时,数字,以前的数据将被删除.
But as i input the data such as spam & number, previous data is deleted.
因此,我想在一个键中实现多个价值... (我认为使用列表是一种好方法)
So i'd like to make multiple value in one key... (i think using list is kinda good method)
例如
键:垃圾邮件-值:01012341111、01099991234,
Key: spam - Value: 01012341111, 01099991234,
密钥:垃圾邮件-值:01032938962、01023421232、01023124242
Key: spam - Value: 01032938962, 01023421232, 01023124242
总而言之,我想获得这张照片(随附图片)
In summary, I want to get this print (attached Picture)
这是我的代码:
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
推荐答案
您应该为此使用列表.问题是您无法附加到尚未设置的值.
You should use list for that. The problem is that you cannot append to a value that has not yet been set.
>>> d = {}
>>> d['a'].append('value')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'a'
而且,如您所见,多次分配相同的键不会成功.
And, as you saw, assigning multiple times to the same key won't do the trick.
>>> d = {}
>>> d['a'] = 'value1'
>>> d['a'] = 'value2'
>>> d
{'a': 'value2'}
因此,为了使其正常工作,您可以使用一个空列表初始化所有可能的键:
So, in order to make it work you could initialize all your possible keys with an empty list:
>>> 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']}
这有效,但很累.初始化字典是一个非常常见的用例,因此,在dict
中添加了一个方法来添加默认值(如果尚未设置):
This works but it's just tiring. Initializing dicts is a very common use case, so a method was added to dict
to add a default value if it has not yet been set:
>>> 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
.
But then again you would have to remember to call setdefault
every time. To solve this the default library offers 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']
可能正是您所需要的.
希望我能帮上忙. ;)
Hope I could help. ;)
这篇关于用python制作电话簿:我想通过修复当前代码来获取此屏幕的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!