Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将简单元组转换为字典_Python_Dictionary_Tuples - Fatal编程技术网

Python 将简单元组转换为字典

Python 将简单元组转换为字典,python,dictionary,tuples,Python,Dictionary,Tuples,我有一个偶数长度的元组,它包含像‘a’、‘b’、‘c’、‘d’、‘e’、‘f’这样的元素,我想把这些元素转换成字典,它包含像[‘a’:‘b’、‘c’:‘d’、‘e’:‘f’]这样的元素 我试着用dicttuple,但没用。我刚刚开始学习Python,任何帮助都将是非常值得的。您可以使用dict理解: 请注意 range(0,len(t),2) 将生成表单的列表 [0, 2, 4] 试试这个: t = ('a','b','c','d','e','f') dict(t[i:i+2] for i

我有一个偶数长度的元组,它包含像‘a’、‘b’、‘c’、‘d’、‘e’、‘f’这样的元素,我想把这些元素转换成字典,它包含像[‘a’:‘b’、‘c’:‘d’、‘e’:‘f’]这样的元素

我试着用dicttuple,但没用。我刚刚开始学习Python,任何帮助都将是非常值得的。

您可以使用dict理解:

请注意

range(0,len(t),2)
将生成表单的列表

[0, 2, 4]
试试这个:

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'}

看起来您正在尝试将元组分组成对,然后用这些对制作dict。有两种方法可以做到这一点

第一个是压缩切片:

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

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

第二个是压缩迭代器本身:

i = iter(t)
zip(i, i)
由于对i的两个引用都是同一个迭代器,因此每当您推进一个迭代器时,它就会同时推进两个迭代器。第一个得到0,第二个得到1,第一个得到2,第二个得到3,依此类推

有关详细信息,请参见上的教程部分。另请参见,这解释了这个想法的更一般版本,或者至少试图解释

无论哪种方式,你都会得到‘a’、‘b’,然后是‘c’、‘d’,然后是‘e’、‘f’,所以你可以把它传递给dict:

那么,哪一个更好呢

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

然而,切片不适用于任意的可编辑性,只适用于序列,它会在大的输入上浪费内存——实际上,你是在制作序列的一个完整的额外副本,而且它更难推广

你应该了解它们是如何工作的,这样你才能做出适当的选择

>>> tup = ('a','b','c','d','e','f')
>>> dct = dict(zip(tup[::2], tup[1::2]))
{'a': 'b', 'c': 'd', 'e', 'f'}
这应该能奏效

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

多亏了和。

听写理解在这里无缘无故是多余的冗长;如果你已经有了一个由2个元素组成的iterable,你可以直接调用dict。
>>> tup = ('a','b','c','d','e','f')
>>> dct = dict(zip(tup[::2], tup[1::2]))
{'a': 'b', 'c': 'd', 'e', 'f'}
def tup2dict():
    tup = ('a','b','c','d','e','f')
    print ({i:j for (i,j) in zip(tup,tup[1:])[::2]})