2016-07-05 67 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

相关问题