为了账号安全,请及时绑定邮箱和手机立即绑定

在Python中将列表转换为字典

/ 猿问

在Python中将列表转换为字典

慕盖茨1488219 2019-10-12 07:07:19

在Python中将列表转换为字典

假设我a在Python中有一个列表,其条目可以方便地映射到字典。每个偶数元素代表字典的键,以下奇数元素是值

例如,

a = ['hello','world','1','2']

我想把它转换成字典b,在那里

b['hello'] = 'world'b['1'] = '2'

什么是语法上最干净的方法来实现这一目标?


查看完整描述

3 回答

?
catspeake
b = dict(zip(a[::2], a[1::2]))

如果a很大,你可能想要做类似下面的事情,它不会像上面那样制作任何临时列表。

from itertools import izip
i = iter(a)b = dict(izip(i, i))

在Python 3中你也可以使用dict理解,但具有讽刺意味的是,我认为最简单的方法是使用range()len(),这通常是代码气味。

b = {a[i]: a[i+1] for i in range(0, len(a), 2)}

因此,该iter()/izip()方法仍然可能是Python 3中最Pythonic 的方法,尽管EOL在评论中指出,zip()在Python 3中已经很懒,所以你不需要izip()

i = iter(a)b = dict(zip(i, i))

如果你想要它在一行,你将不得不作弊并使用分号。;-)



查看完整回答
反对 回复 2019-10-13
?
尚方宝剑之说

简单回答

另一种选择(由Alex Martelli提供https://stackoverflow.com/a/2597178/104264):

dict(x[i:i+2] for i in range(0, len(x), 2))


相关说明

如果你有这个:

a = ['bi','double','duo','two']

你想要这个(列表中每个元素键入一个给定的值(在这种情况下为2)):

{'bi':2,'double':2,'duo':2,'two':2}

您可以使用:

>>> dict((k,2) for k in a){'double': 2, 'bi': 2, 'two': 2, 'duo': 2}



查看完整回答
反对 回复 2019-10-13
?
慕田峪7331174

您可以非常轻松地使用dict理解:

a = ['hello','world','1','2']my_dict = {item : a[index+1] for index, item in enumerate(a) if index % 2 == 0}

这相当于下面的for循环:

my_dict = {}for index, item in enumerate(a):
    if index % 2 == 0:
        my_dict[item] = a[index+1]



查看完整回答
反对 回复 2019-10-13

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信