2012-06-01 48 views
2

我有一個列表,我需要將其製作成字典。該列表具有重複(即將成爲)具有不同值的鍵。我如何找到這些鍵並將新值添加到它?如果鍵已經存在,將值附加到鍵(python/jython)

list=[q:1,w:2,q:7] 
dictionary= q:1,7 
      w:2 

在此先感謝

+2

列表通常不具有鍵值對。你的列表是由元組還是其他?此外,你想以什麼方式明確地將值附加到其他值 - 你是否將它們視爲字符串?因爲你的例子表明他們被視爲整數。 –

回答

9

請在你的字典列表中的值,讓你有:

dictionary = {'q': [1, 7], 
       'w': [2] 
} 

等即你的一個項的值是一個項目列表。這意味着,當你有另一'q',你可以這樣做:

dictionary['q'].append(5) 

dictionary['q']將是一個KeyError你第一次做,所以使用setdefault代替:

dictionary.setdefault('q', []).append(5) 

所以,現在你只需需要迭代輸入列表中的每個鍵和值對,並對它們中的每一個進行上述操作。

你可能或者想擁有dictionary是:

dictionary = collections.defaultdict(list) 

所以,你可以做dictionary['q'].append(5) - 它將工作與上述相同,在各方面的酒吧之一。如果,你已經解析您的原始清單,並正確設置所有的值之後,你的字典是這樣的:

dictionary = {'q': [1, 7, 5] 
       'w': [2, 8, 10, 80] 
       'x': [3] 
} 

,並嘗試做print(dictionary['y'])。你期望發生什麼?如果您使用正常的字典和setdefault,這被認爲是一個錯誤,所以它會提高KeyError。如果您使用defaultdict,它將打印一個空列表。無論哪種方法對你的代碼更有意義都應該決定你編碼的方式。

+2

更好的是,使用'collections.defaultdict(list)' - 然後你可以像使用普通字典一樣分配或查找。 –

+0

@DavidRobinson在這種情況下'defaultdict'是否優於setdefault是有爭議的。當工廠功能昂貴時,他們的主要好處就來了 - 但建立一個空的清單並不是。 – lvc

+0

我認爲這對代碼緊湊有利。您只需定義一次字典,但可能會在代碼中多次獲取或設置值。 –

相關問題