将简单元组转换为字典

时间:2014-08-27 03:20:28

标签: python dictionary tuples

我有一个偶数长度的元组,其中包含('a','b','c','d','e','f')等元素,我想将其转换为包含['a':'b', 'c':'d', 'e':'f']等元素的字典。

我尝试使用dict(tuple),但这没有帮助。我刚刚开始学习Python,任何帮助都会非常有用。

5 个答案:

答案 0 :(得分:4)

看起来你正试图将元组分组成对,然后从这些对中制作一个字典。有两种方法可以做到这一点。


第一个是拉链切片:

zip(t[::2], t[1::2])

这称为"扩展切片",其形式为start:stop:step。第一个是::2,因此它具有默认的开始(元组的开头)和停止(元组的结尾),以及步骤2,因此它获得元素0,2和4。第二个是1::2,所以它是相同的,但它从1开始而不是默认值,因此它获得元素1,3和5。

有关详细信息,请参阅Lists上的教程部分。 (当然,您使用的是元组,而不是列表,但它们都以相同的方式切片。)


第二个是自己压缩迭代器:

i = iter(t)
zip(i, i)

由于对i的两个引用都是相同的迭代器,所以每当你前进一个时,它都会前进。所以,第一个获得#0,然后第二个获得#1,然后第一个获得#2,第二个获得#3,依此类推。

有关详细信息,请参阅Iterators上的教程部分。另请参阅How grouper works,它解释了这个想法的更一般版本(或者至少尝试过)。


无论哪种方式,您都会获得('a', 'b'),然后是('c', 'd'),然后是('e', 'f'),因此您可以将其传递给dict

dict(zip(t[::2], t[1::2]))

那么哪一个更好?

切片可能更容易理解。它通常也更快。

然而,切片并不适用于任意迭代,只是序列,它会浪费大输入上的内存(你实际上是在制作序列的完整额外副本),而且它更难一点概括。

您应该了解它们是如何工作的,以便您可以适当选择。

答案 1 :(得分:1)

您可以使用字典理解

t = ('a','b','c','d','e','f')
d = {t[i]:t[i+1] for i in range(0,len(t),2)}

注意部分

range(0,len(t),2)

将生成表单

的列表
[0, 2, 4]

答案 2 :(得分:1)

试试这个:

t = ('a','b','c','d','e','f')
dict(t[i:i+2] for i in xrange(0, len(t), 2))
=> {'a': 'b', 'c': 'd', 'e': 'f'}

答案 3 :(得分:0)

>>> tup = ('a','b','c','d','e','f')
>>> dct = dict(zip(tup[::2], tup[1::2]))
{'a': 'b', 'c': 'd', 'e', 'f'}

这应该可以解决问题

答案 4 :(得分:-1)

def tup2dict():
    tup = ('a','b','c','d','e','f')
    print ({i:j for (i,j) in zip(tup,tup[1:])[::2]})

感谢iterating-over-every-two-elements-in-a-listpython-dictionary-comprehensionn