列表到字典:甚至项目作为键,奇数项作为值
问题描述:
我想用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
。但后来我不确定如何将以下数字与正确的项目相匹配。
答
最短途径:
dict(zip(inv[::2], inv[1::2]))
答
的关键是使用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)
答
另一种选择使用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}
另一个用途您可迭代的:'A = ITER(INV); {i:next(a)for i in a}' – hpaulj