我有一个偶数长度的元组,其中包含('a','b','c','d','e','f')
等元素,我想将其转换为包含['a':'b', 'c':'d', 'e':'f']
等元素的字典。
我尝试使用dict(tuple)
,但这没有帮助。我刚刚开始学习Python,任何帮助都会非常有用。
答案 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-list和python-dictionary-comprehensionn。