Python 3(初学者) - 图书馆计划,一般问题

时间:2015-05-08 15:41:43

标签: python python-3.x dictionary readlines

实际上,我已经分配了一个编程任务,其中我应该建立一个"库"各种各样的。该程序应该加载哪些书籍可用,谁写过它们,以及它们是否已经借出。主菜单是一个菜单,您可以在其中选择几个选项(搜索作者,搜索标题,贷款簿,还书,添加书籍,删除书籍和列出所有书籍)。到目前为止,我已经使用字典完成了这项工作;为了搜索作者/书,我扫描了一个带有readlines的文本文件(两个不同的文本文件,一个列出了作者后面跟着标题,另一个列出了标题后面跟着作者),然后添加了(如果是我正在寻找作者)作者的关键和书名作为字典中的价值。

但是,我现在遇到了一个很大的问题,因为我正在使用词典:如果作者写过几本书,我就不能列出他/她写过的所有书籍,只列出一本书,特别是最后一个(因为我的循环遍历readlines的所有扫描行()会将作者添加为键,并且您只能拥有一个相同的键...)。现在我想知道,有没有办法可以操作字典,这样你就可以有几个相同的键,每个键指向不同的值?或者是否有更好,更简单的方法可以实现我想要做的事情?

对任何帮助都非常有帮助,如果这看起来有点不清楚,那就很抱歉。如果您有任何问题,请询问。

2 个答案:

答案 0 :(得分:1)

您可以尝试使用字典中的列表来保存给定作者的所有标题。

authors={}
authors['Brandon Sanderson'] = ['The Way of Kings', 'The Final Empire','Elantris']

这将允许您为每位作者拥有多本书。虽然给出了你的问题描述,你可能最好做一个标题词典,其中每个标题也是一个包含作者/结账信息的字典 - 因为你的搜索/查找似乎是基于书本而不是基于作者。

titles = {}
titles['The Way of Kings'] = {'author':'Brandon Sanderson', 'checkout':False}

更新:  要在列表中保存结帐信息,只需使用列表中的字典即可。 Python列表不仅限于它们保存各种对象的基元。

    authors={}
    authors['Brandon Sanderson'] = [{'title':'The Way of Kings','checkout':False},{'title':'The Final Empire','checkout':False}]
    authors['Brandon Sanderson'].append({'title':'Elantris','checkout':False})

答案 1 :(得分:0)

假设您继续使用词典方法,可以使用作者姓名作为键,但将书籍作为列表插入。假设您有一位名为“Smith”的作者:

my_dict = {}
my_dict['Smith'] = ['Book Name']
my_dict['Smith'].append('Another Book Name')

更进一步,如果作者已经存在于词典中,您可以创建一个将书名附加到列表中的函数,如果作者尚不存在,则将新项添加到词典中:

def addBook(Name, Title):
    try:
        my_dict[Name].append(Title)
    except KeyError:
        my_dict[Name] = [Title]