我需要转换这样的结构:
(1, 2, 3, 4, 5, 6)
对于这样的词典:
{1: 2, 3: 4, 5: 6}
你会怎么做?
答案 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。虽然,这种方法可以说更简单,更具可读性。