列表到词典:偶数项作为键,奇项作为值

时间:2016-07-05 02:29:40

标签: python list dictionary

我正在尝试使用Python将list转换为dictionary,我需要帮助提出一个简单的解决方案。我想要转换的列表如下所示:

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

我想从此dictionary创建一个list,其中偶数位置的项目(苹果,橙子,酸橙,香蕉,葡萄)是keys,以及项目在奇数位置(2,3,10,7,4)是values

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

我尝试使用类似enumerate的内容来计算项目的位置,然后如果它是偶数,则将其设置为key。但是,我不确定如何将以下数字与其正确的项目相匹配。

3 个答案:

答案 0 :(得分:13)

最短路:

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

答案 1 :(得分:1)

关键是在结果列表对上使用pairwise iteration并调用dict()构造函数,这将使用第一项作为键创建字典,第二项作为值:

  

iterable中的每个项目本身必须是一个只有两个的可迭代项   对象。每个项目的第一个对象成为新项目的关键   字典,第二个对象是相应的值。

样品:

>>> 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)

答案 2 :(得分:1)

使用org.junit.Assert的另一个选项:

zip

或者@DSM建议:

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