2014-05-06 43 views
0

我是新來的詞典概念,並陷入了一個問題。我編寫了一本書店的字典,在字典中,鍵是作者的最後一個名字,即。 「莎士比亞,威廉。在字典中改變列表

{'Dickens,Charles': [['Hard Times', '7', '27.00']], 
'Shakespeare,William': [['Rome And Juliet', '5', '5.99'], 
         ['Macbeth', '3', '7.99']]} 
  • 價值觀是:書籍名稱,庫存量和價格。我想要一個可以改變書本數量的函數。
  • 用戶將輸入:作者的姓氏,然後輸入書名,然後輸入他們想要的新數量。
  • 如果作者不存在,它應該說,沒有一個作者的名字是給定的,如果這本書不存在,也是一樣的。
  • 在一個單獨的函數中,我需要合計這個庫存的總量。所以現在看,它會是5 + 3 + 7 = 15本書。我需要一個類似的價格函數,但它應該與我相信的數量基本相同。

謝謝你的幫助。

我試圖創建另一個字典,書籍作爲關鍵字如下:

def addBook(theInventory): 
d = {} 
first = input("Enter the first name: ") 
last = input("Enter the last name: ") 
first = first[0].upper() + first[1:].lower() 
last = last[0].upper() + last[1:].lower() 
name = last + "," + first 
book = input("Enter the name of the book: ") 
for name, books in sorted(theInventory.items()): 
for title, qty, price in sorted(books): 
     d[title] = [] 
     d[title].append(qty) 
     d[title].append(price) 

    d[book][0] = qty 

我需要用新的數量更新theInventory,所以theInventory會在main()改變,但是這是不是做它。我該如何做到這一點,因爲d引用了庫存並改變了庫存中的數量?

+0

你嘗試過什麼/你有什麼地方你困惑一個更具體的問題? – Alec

+0

「價值是書名,現有數量和價格」實際上,這些價值列表包含名稱,數量和價格三元組。 – Alec

+0

我可以通過說:theInventory ['Shakespeare,William'] [1] [1] =「新號碼」來改變麥克白的價值,但我想要一個更一般的聲明,你不能只是硬編碼它。我對如何接受這本書的名字感到困惑不解。 – user3599753

回答

0

我想我想出了你想要的東西。我碰到的一個問題是你如何格式化你的字典。在您的原始文章中,您擁有所有字典值的雙重列表。我認爲像我一樣格式化字典會更容易。我記住的一個變化是,在changeQuantity()函數中,我將庫存號從一個字符串切換到了一個int值。我不確定你想要怎麼做,但是可以通過將newquant arg設置爲字符串類型來輕鬆更改格式。希望這有助於!

bookdict = {'Dickens,Charles': ['Hard Times', '7', '27.00'], 
'Shakespeare,William': [['Rome And Juliet', '5', '5.99'], ['Macbeth', '3', '7.99']]} 

def changeQuantity(authorlast,authorfirst,bookname,newquant): 
    bookfound = False 
    author = str(authorlast)+','+str(authorfirst) 
    if not author in bookdict: 
     return "Author not in inventory" 
    temp = bookdict.values() 
    if type(bookdict[author][0]) == list: 
     for entry in bookdict[author]: 
      if entry[0] == bookname: 
       entry[1] = newquant 
       bookfound = True 
    else: 
     if bookdict[author][0] == bookname: 
      bookdict[author][1] = newquant 
      bookfound = True 
    if bookfound == False: 
     return "Book not in author inventory" 
    return bookdict 

def sumInventory(): 
    sum = 0 
    for key in bookdict.keys(): 
     if type(bookdict[key][0]) == list: 
      for entry in bookdict[key]: 
       sum += int(entry[1]) 
     else: 
      sum += int(bookdict[key][1]) 
    return sum 


print changeQuantity("Dickens","Charles","Hard Times",2) 
print changeQuantity("a","b","Hard Times",2) 
print changeQuantity("Shakespeare", "William", "a", 7) 
print sumInventory() 

輸出:

{'Shakespeare,William': [['Rome And Juliet', '5', '5.99'], ['Macbeth', '3', '7.99']], 'Dickens,Charles': ['Hard Times', 2, '27.00']} 
Author not in inventory 
Book not in author inventory 
10 
+0

哎呦,你完全可以刪除第9行 – dhvogel

+0

我必須按照我的要求格式化字典,因爲我使用文件創建它。 – user3599753

+0

你是說刪除溫度。另外,這可以用於價格? – user3599753