2015-05-08 34 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