2014-05-03 47 views
0

我需要創建一本詞典,其中作者的最後一個名字作爲關鍵字,手頭的數量,價格和書的名稱作爲值。從二維清單創建詞典

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

我編譯了這個2-D列表,到目前爲止,我被卡住了。

任何幫助,將不勝感激!

+0

什麼語言? –

+0

在python中編碼3 – user3599753

+1

爲了將來的參考,如果您包含已經用於嘗試解決這個問題的任何代碼,您可能會得到更多的幫助。 –

回答

0

下面將創建一個每個作者的名字映射到他們所寫的書籍list的字典。這是通過在collections模塊中定義的名爲defaultdict的內置字典類型的專業化來完成的。

from collections import defaultdict 
from pprint import pprint 

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

d = defaultdict(list) 
for book in (book for book in books if book[0]): 
    d[book[0], book[1]].append(book[2:]) 

pprint(d) 

輸出:

{('Dickens', 'Charles'): [['Hard Times', '7', '27.00']], 
('Shakespeare', 'William'): [['Rome And Juliet', '5', '5.99'], 
           ['Macbeth', '3', '7.99']]} 
+0

哇,我甚至不知道defaultdict。而且你實際上做得很完美,因爲作者可以有多本書,因此一個鍵的多個值。 – user3599753

+0

是的,對於需要將鍵映射到多個值的字典,'defaultdict'非常方便,因爲添加第一個鍵不需要作爲特殊情況來處理。如果這回答你的問題最好,請接受它。如果您不確定如何操作,請參閱問題[接受答案的工作方式?](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) – martineau

+0

我如何用這些值創建一個二維列表?所以這本書會是更大的列表,它將包含另一個列表,其中包含2個數字。 – user3599753

1

這聽起來不像你有很多Python的經驗。您應該注意本教程的以下部分(在您完成整個教程的過程中,這非常值得您的時間!):looping techniques,dictionariestuples and sequences

最後,你可能會想沿着這些路線的東西:

>>> books = [['Shakespeare', 'William', 'Rome And Juliet', '5', '5.99'], ['Shakespeare', 'William', 'Macbeth', '3', '7.99'], ['Dickens', 'Charles', 'Hard Times', '7', '27.00'], ['']] 
>>> d = dict() 
>>> for book in books: 
    if book and len(book) > 3: # make sure book list is not empty and has more than three elements 
     d[tuple(book[:2])] = book[3:] + [book[2]] # make sure value reflects your desired order 

>>> d 
{('Dickens', 'Charles'): ['7', '27.00', 'Hard Times'], ('Shakespeare', 'William'): ['3', '7.99', 'Macbeth']} 

注意,字典的鍵必須是不變的,所以我做了d元組的每個關鍵。

+0

謝謝你的鏈接!不,我沒有太多經驗。只是讀一本書,並努力學習最好的我可以。遇到這個問題,並不能解決它。 – user3599753