2016-03-21 33 views
0

我是Python的新手。我試圖將2個列表壓縮到字典中,而不會丟失重複鍵的值,並將值保存爲字典中的列表。Python:將zip 2列入dictonary,刪除重複的鍵,但保留值

例子:

list1 = [0.43, -1.2, 50, -60.5, 50] 

list2 = ['tree', 'cat', 'cat', 'tree', 'hat'] 

我試圖得到以下結果:

{'tree': [0.43, -60.5],'cat': [-1.2, 50],'hat': [50]} 

感謝您的幫助。

+1

什麼問題你有嗎? – Noelkd

回答

2

您可以使用字典的setdefault方法:

list1 = [0.43, -1.2, 50, -60.5, 50] 
list2 = ['tree', 'cat', 'cat', 'tree', 'hat'] 
d = {} 
for k, v in zip(list2, list1): 
    d.setdefault(k, []).append(v) 

結果:

>>> d 
{'cat': [-1.2, 50], 'hat': [50], 'tree': [0.43, -60.5]} 
+1

這是如何有用?它解決了問題,但沒有MVP我們不知道OP實際上有什麼問題,如果這是一個家庭作業問題,那麼他們有一個答案,但它欺騙了他們有機會學習.. – Noelkd

+3

這個答案看起來非常好,併產生期望的結果。我想知道爲什麼@Noelkd認爲這個問題不清楚。 –

+1

[提問作業幫助的問題必須包括您迄今爲止解決問題所做的工作摘要,以及您解決問題的難點描述。](http://stackoverflow.com/help/on -topo) – Noelkd

2

由邁克·穆勒提供的答案很完善。另一種,也許稍微更Python的方式是使用defaultdict從集合庫:

from collections import defaultdict 

list1 = [0.43, -1.2, 50, -60.5, 50] 
list2 = ['tree', 'cat', 'cat', 'tree', 'hat'] 
d = defaultdict(list) 
for k, v in zip(list2, list1): 
    d[k].append(v) 
0

只是爲了完整性,這是我會如何做,在我早期的編程

>>> list1 = [0.43, -1.2, 50, -60.5, 50] 
>>> list2 = ['tree', 'cat', 'cat', 'tree', 'hat'] 
>>> result=dict() 
>>> for k,v in zip(list2,list1): 
     if k in result: 
      result[k].append(v) 
     else: 
      result[k]=[v] 


>>> result 
{'hat': [50], 'tree': [0.43, -60.5], 'cat': [-1.2, 50]} 
>>> 
相關問題