列表与键和值的字典

时间:2015-12-23 17:12:32

标签: python list dictionary

我有一个列表(myarray)看起来像这样,

[u 'item-01', 52, u 'item-02', 22, u 'item-03', 99, u 'item-04', 84]

我正在尝试将其转换为带有键和值的字典。

我尝试过循环,但没有给我预期的结果,

mydict = {}
for k,v in myarray:
mydict[k] = v

2 个答案:

答案 0 :(得分:6)

简单:使用zip和扩展切片。

mydict = dict(zip(myarray[::2], myarray[1::2]))

第一个扩展切片生成所有偶数索引的list,其次是奇数,zip将它们配对成tuple s和dict构造函数可以采用可迭代的配对值,并使用它们作为键/值对进行初始化。

注意:Padraig使用iter的解决方案可以更快地工作(并处理非序列迭代),虽然它不太直观(并且不像编写的那样简洁)。当然,它可以是单行的,但代价是using the behavior of list multiplication copying references变得更不直观(参见序列操作表中的注释2; itertools grouper recipe中可以找到另一个用途的例子。 ):

mydict = dict(zip(*[iter(myarray)]*2))

答案 1 :(得分:4)

您可以合并iterzip

l = [u'item-01', 52, u'item-02', 22, u'item-03', 99, u'item-04', 84]

it = iter(l)

print(dict(zip(it, it)))
{u'item-04': 84, u'item-01': 52, u'item-03': 99, u'item-02': 22}

zip(it, it)创建组合每两个元素的对,在结果上调用dict使用每个元组的第一个元素作为键,第二个元素作为vale。

In [16]: it = iter(l)

In [17]: l = list(zip(it,it))

In [18]: l
Out[18]: [('item-01', 52), ('item-02', 22), ('item-03', 99), ('item-04', 84)]

In [19]: dict(l)
Out[19]: {'item-01': 52, 'item-02': 22, 'item-03': 99, 'item-04': 84}

像你自己的代码一样使用for循环:

it = iter(l)
d = {}
for k, v in it:
    d[k] = v