如何在python列表中获取某个索引的值?

时间:2009-12-22 02:10:46

标签: python

我有一个看起来像这样的列表

List = [q1,a1,q2,a2,q3,a3]

我需要最终的代码是这样的

dictionary = {q1:a1,q2:a2,q3:a3}

如果我只能获得某个索引的值,例如List [0]我可以做到这一点,有什么方法可以得到它吗?

5 个答案:

答案 0 :(得分:11)

Python字典可以使用dict类构造,给定包含元组的迭代。我们可以将它与range内置结合使用,以生成元组集合(每个奇数项,每个偶数项),并将其传递给dict,以便值在最终结果中将自己组织成键/值对:

dictionary = dict([(List[i], List[i+1]) for i in range(0, len(List), 2)])

答案 1 :(得分:11)

使用扩展切片表示法:

dictionary = dict(zip(List[0::2], List[1::2]))

答案 2 :(得分:3)

基于范围的答案更简单,但使用itertools包还有另一种方法:

from itertools import izip
dictionary = dict(izip(*[iter(List)] * 2))

打破此局面(此次编辑测试):

# Create instance of iterator wrapped around List
# which will consume items one at a time when called.
iter(List)

# Put reference to iterator into list and duplicate it so
# there are two references to the *same* iterator.
[iter(List)] * 2 

# Pass each item in the list as a separate argument to the
# izip() function.  This uses the special * syntax that takes
# a sequence and spreads it across a number of positional arguments.
izip(* [iter(List)] * 2)

# Use regular dict() constructor, same as in the answer by zzzeeek
dict(izip(* [iter(List)] * 2))

编辑:非常感谢Chris Lutz对双重修正的敏锐眼光。

答案 3 :(得分:2)

d = {}
for i in range(0, len(List), 2):
    d[List[i]] = List[i+1]

答案 4 :(得分:0)

您在评论中提到您有重复的条目。我们可以用这个。采用您最喜欢的生成元组列表的方法,并将其扩展为for循环:

from itertools import izip

dictionary = {}
for k, v in izip(List[::2], List[1::2]):
    if k not in dictionary:
        dictionary[k] = set()
    dictionary[k].add(v)

或者我们可以使用collections.defaultdict,因此我们无需检查密钥是否已初始化:

from itertools import izip
from collections import defaultdict

dictionary = defaultdict(set)
for k, v in izip(List[::2], List[1::2]):
    dictionary[k].add(v)

我们将以字典结束,其中所有键都是集合,并且集合包含值。这仍然可能不合适,因为像字典这样的集合不能保留重复项,因此如果您需要一个键来保存两个相同的值,则需要将其更改为元组或列表。但这应该让你开始。