2017-03-22 23 views
1

列表中理解一個字典時得到重複的值,我有兩個列表如下:創建與在Python

list1 = [0, 0, 1] 
list2 = [0, 1, 2] 

我壓縮它們使用:

zipped_list = zip(list1,list2) 

結果是zipped_list = [(0, 0), (0, 1), (1, 2)] 現在,我想使用列表理解創建詞典如下:

d = {k:v for k, v in zipped_list} 

結果是d={0: 1, 1: 2}

這就是zipped_list中的key = 0,該字典只包含最後一次出現的鍵值對。

現在的問題是:我怎樣才能得到重複鍵的所有鍵值對,而不僅僅是最後一個?

該具體示例中,我想獲得

d={0: 0, 0: 1, 1: 2} 

回答

1

這是不可能的,因爲你不能有重複鍵類型的字典。

您可以改爲嘗試使用同一個鍵下的所有值的list

>>> from collections import defaultdict 
>>> d = defaultdict(list) 
>>> zipped_list = [(0, 0), (0, 1), (1, 2)] 
>>> for k,v in zipped_list: 
...  d[k].append(v) 
... 
>>> d 
defaultdict(<type 'list'>, {0: [0, 1], 1: [2]}) 
+0

謝謝!我可以用其他可散列的數據結構來實現嗎? –

+0

通過解決方法更新了我的答案。 –

1

基本上相同的方法@Ashish使用,但沒有任何外部模塊(進口)

list1 = [0, 0, 1] 
list2 = [0, 1, 2] 

zipped = zip(list1, list2) 

d = {} 
for items in zipped: 
    res = d.setdefault(items[0], []) 
    res.append(items[1]) 

print(d) # prints: {0: [0, 1], 1: [2]} 

是的,這可以與任何其他可哈希數據結構來實現,如果它是你意思是。例如,list1本可以是list1 = ['a', 'a', 'b']

如果您發現setdefault花式看看它的documentation