2016-07-05 79 views
4

我想用Python將list轉換爲dictionary,我需要幫助提出一個簡單的解決方案。我想轉換列表如下:列表到字典:甚至項目作爲鍵,奇數項作爲值

inv = ['apples', 2, 'oranges', 3, 'limes', 10, 'bananas', 7, 'grapes', 4] 

我要創建這個list,其中在偶數位置的項目(蘋果,橙子,檸檬,香蕉,葡萄)是keys一個dictionary ,並且奇數位置(2,3,10,7,4)中的項目是values

inv_dict = {'apples':2, 'oranges':3, 'limes':10, 'bananas':7, 'grapes':4} 

我已經使用類似enumerate計數項目的位置嘗試,然後如果它甚至,它設置爲key。但後來我不確定如何將以下數字與正確的項目相匹配。

回答

9

最短途徑:

dict(zip(inv[::2], inv[1::2])) 
1

的關鍵是使用pairwise iteration並調用dict()構造所產生的對名單上,這將創建一個使用第一個項目作爲鍵的字典和第二的價值觀:

在迭代每個項目都必須本身與兩個 對象進行迭代。每個項目的第一個對象成爲新的 字典中的一個鍵,第二個對象爲相應的值。

樣品:

>>> inv = ['apples', 2, 'oranges', 3, 'limes', 10, 'bananas', 7, 'grapes', 4] 
>>> dict(pairwise(inv)) 
{'grapes': 4, 'bananas': 7, 'apples': 2, 'oranges': 3, 'limes': 10} 

其中pairwise()功能從this answer採取:

from itertools import izip 

def pairwise(iterable): 
    a = iter(iterable) 
    return izip(a, a) 
+0

另一個用途您可迭代的:'A = ITER(INV); {i:next(a)for i in a}' – hpaulj

1

另一種選擇使用zip

dict([(x, y) for x, y in zip(inv[::2], inv[1::2])]) 
# {'apples': 2, 'bananas': 7, 'grapes': 4, 'limes': 10, 'oranges': 3} 

或者正如@DSM建議:

dict(zip(inv[::2], inv[1::2])) 
# {'apples': 2, 'bananas': 7, 'grapes': 4, 'limes': 10, 'oranges': 3} 
+1

這裏不需要列表理解; 'dict(zip(inv ..))'同樣適用。 – DSM

+0

@DSM很簡單的答案。 – Psidom

相關問題