2015-04-02 92 views
3

如何創建一個字典,每個鍵的值來自2個列表中的多個值?創建字典,每個密鑰有多個值

例如,我有:

>>> list1 = ['fruit', 'fruit', 'vegetable'] 

>>> list2 = ['apple', 'banana', 'carrot'] 

而且,我想要的東西的影響:我曾嘗試

>>> dictionary = {'fruit': ['apple', 'banana'], 'vegetable': ['carrot']} 

到目前爲止以下:

>>> keys = list1 
>>> values = list2 
>>> dictionary = dict(zip(keys, values)) 
>>> dictionary 
    {'fruit': 'banana', 'vegetable': 'carrot'} 

回答

6

你可以使用collections.defaultdict進行此類任務:

>>> from collections import defaultdict 
>>> d=defaultdict(list) 
>>> for i,j in zip(list1,list2): 
... d[i].append(j) 
... 
>>> d 
defaultdict(<type 'list'>, {'vegetable': ['carrot'], 'fruit': ['apple', 'banana']}) 
6

您可以使用dict.setdefault和一個簡單的for循環:

>>> list1 = ["fruit", "fruit", "vegetable"] 
>>> list2 = ["apple", "banana", "carrot"] 
>>> dct = {} 
>>> for i, j in zip(list1, list2): 
...  dct.setdefault(i, []).append(j) 
... 
>>> dct 
{'fruit': ['apple', 'banana'], 'vegetable': ['carrot']} 

docs

setdefault(key[, default])

如果key在字典中,返回其值。如果不是,則插入key,值爲default,並返回defaultdefault默認爲None

5

這與其他答案有點不同。對初學者來說這比較簡單一些。

list1 = ['fruit', 'fruit', 'vegetable'] 
list2 = ['apple', 'banana', 'carrot'] 
dictionary = {} 

for i in list1: 
    dictionary[i] = [] 

for i in range(0,len(list1)): 
    dictionary[list1[i]].append(list2[i]) 

它將返回

{'vegetable': ['carrot'], 'fruit': ['apple', 'banana']} 

此代碼貫穿list1,使每個項目在它的dictionary空單的關鍵。然後從0-2開始,並將list2中的每個項目追加到相應的類別,以便每個匹配中的索引0,每個匹配中的索引1以及每個匹配中的索引2匹配。

+1

*蠻力* .... <3 – 2015-04-02 06:08:16

+0

謝謝,解釋真的有幫助! – Susie 2015-04-02 06:20:56

相關問題