将元组元素转换为字典

时间:2016-04-25 17:05:26

标签: python python-3.x

我需要转换这样的结构:

(1, 2, 3, 4, 5, 6)

对于这样的词典:

{1: 2, 3: 4, 5: 6}

你会怎么做?

2 个答案:

答案 0 :(得分:3)

将元素2加2,并将结果传递给dict()

result = dict(zip(*[iter(values)] * 2))

在这里使用iter(),您可以避免以[::2][1::2]切片的方式创建两个内存中列表对象。请参阅Iterating over every two elements in a list了解其原因。

演示:

>>> values = (1, 2, 3, 4, 5, 6)
>>> dict(zip(*[iter(values)] * 2))
{1: 2, 3: 4, 5: 6}

答案 1 :(得分:1)

我的想法是zip将两个元组与第2步一起 - 第一个从第0个元素开始,第二个 - 第一个元素,然后将结果传递给dict()构造:

>>> t = (1, 2, 3, 4, 5, 6)
>>> dict(zip(t[::2], t[1::2]))
{1: 2, 3: 4, 5: 6}

为了扩展它,这里是中间值:

>>> t[::2]
(1, 3, 5)
>>> t[1::2]
(2, 4, 6)

现在zip()会将元素按位置聚合在一起:

>>> zip(t[::2], t[1::2])
[(1, 2), (3, 4), (5, 6)]

然后,dict()会使用项目的第一个元素作为键,第二个元素作为值,从列表中创建一个字典。

请注意,这种方法的缺点是在内存中创建了两个额外的列表而不是@Martijn's proposal。虽然,这种方法可以说更简单,更具可读性。