-2

我的代码如下所示....

但是当我输入垃圾邮件和号码等数据时,以前的数据会被删除。

所以我想在一个键中创建多个值......(我认为使用列表是一种好方法)

例如,

键:垃圾邮件 - 值: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
4

1 回答 1

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']

这可能正是您所需要的。

希望我能帮上忙。;)

于 2017-12-03T15:58:45.693 回答