2015-05-08 37 views
-1

碰巧,我被分配了一个编程任务,其中我应该建立一个“库”的种类。该程序应该加载可用的书籍,谁写了这些书籍,以及它们是否已经借出。主菜单是一个菜单,您可以在几个选项(搜索作者,搜索标题,贷款簿,退货簿,添加书籍,删除书籍和列出所有书籍)之间进行选择。到目前为止,我已经用字典完成了这个工作。为了搜索作者/书籍,我用readlines扫描了一个文本文件(两个不同的文本文件,其中一个列出作者后面跟着标题,另一个列出作者跟随的标题),然后添加(例如,如果即时搜索作者)作为关键词,书名作为词典中的价值。Python 3(初学者) - 图书馆程序,一般问题

但是,我现在遇到了一个很大的问题,因为我正在使用字典:如果作者写了几本书,我不能列出他/她写的所有书籍,只有一本,特别是最后一本(因为我的循环遍历readlines()中的所有扫描行添加了作者作为关键字,并且只能有一个相同的关键字..)。现在我想知道,是否有任何方法可以操纵字典,以便可以有几个相同的键,每个键指向不同的值?还是有更好,更简单的方法可以实现我想要做的?

对任何帮助非常有帮助,如果这看起来有点不清楚,对不起。如果您有任何疑问,请询问。

+0

这个字典使用类或只是字符串作为关键? – pseudonym117

+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}) 
+0

这实际上是一个非常好的主意,想想我可以试试这个列表thingie。你如何做到这一点,所以列表对象可以保存这样的结帐信息?看起来非常方便;-) – zacdawg

+0

使用列表中的字典。查看我的更新。 –

0

假设您继续使用字典的方法,您可以使用作者的名称作为键,但插入书籍作为列表。让我们假设你有一个名为“史密斯”作者:

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] 
+0

太好了,非常感谢您的帮助! :) – zacdawg