更新字典并与新项目进行比较

时间:2015-09-10 02:23:41

标签: python list dictionary input text-files

好的,所以我完全迷失了这个问题,请帮助我。我已经创建了一个函数,它接收一个文本文件并将所有名称排序到文本文件中,并将它们放在一个字典中。所以我的新词典看起来像这样:

namesDict = {'J': ['Jacob', 'Joshua'], 'T': ['Tyler'], 'A': ['Austin'], 'B': ['Brandon'], 'D': ['Daniel'], 'M': ['Michael', 'Matthew'], 'C': ['Christopher'], 'N': ['Nicholas']}

现在我必须接受我创建的这本词典并添加新名称。新功能必须这样做

该功能将要求用户输入他们的名字。假设用户将输入带有大写首字母的名称,以及之后的所有小写字母。 如果他们的名字已经在字典中,则打印“[name]已经在字典中”,然后返回相同的字典。 如果它们的名称不在字典中,那么您将在相应的键下将其名称添加到字典中,打印“[name]添加到字典”,然后返回更新的字典。 如果他们的名字不在字典中并且他们名字的第一个字母不是字典中的键,那么你将把他们名字的第一个字母添加为一个键,其中一个列表包含他们的名字作为值。然后,您将打印“[name]添加到词典”,并返回更新的词典。

所以我到目前为止这当然没有完成:

def updateDictionary(namesDict):
    newname= input('What is your name?')
    if newname = key:
        print(newname'is already in the dictionary')

    elif newname != key:
        print (newname 'added to dictionary')

    elif newname = key[0]:
        print (newname 'added to dictionary')

我的第一个从文本文件创建字典的代码是:

def newDictionary():
    names={}
    file = open('file.txt','r')
    lines = file.read().split('\n')
    if len(lines) == 1 and len(lines[0]) == 0:
        print('empty file')
    else:
        for line in lines:
            if line in names:
                names[(line[0])].append(line)
            else:
                names[(line[0])] = [line,] 
    return names

但我在这段代码中出现错误,上面写着名字[(line [0])] = [line,] IndexError:字符串索引超出范围。

请帮助我。我不知道如何接受新的输入名称并将其放入字典中。 谢谢

1 个答案:

答案 0 :(得分:1)

问题:

您的newDictionary()无法生成字典,因为文件中可能有空行。

解决方案:

collections.defaultdict会让事情变得更轻松:

from collections import defaultdict

def newDictionary():
    names = defaultdict(list)
    with open('file.txt','r') as f:
        for line in f:
            line = line.strip()
            if line:
                names[line[0]].append(line)
    return names