一个班轮:从列表创建一个以索引为键的字典


91

我只想在给定列表中创建一行字典。字典的键将是索引,而值将是列表的元素。像这样:

a = [51,27,13,56]         #given list

d = one-line-statement    #one line statement to create dictionary

print(d)

输出:

{0:51, 1:27, 2:13, 3:56}

关于我为什么要一条线,我没有任何具体要求。我只是在探索python,想知道是否有可能。


3
您认为拥有这本字典有什么好处?使用字典,索引查找不会更快。
马丁·彼得斯

@MartijnPieters:嗯,我可能需要,例如:{[x[0]:51, x[1]:27, x[2]:13, x[3]:56}
纳瓦兹

3
然后使用zip()dict(zip(x, a))
马丁·彼得斯

Answers:


158
a = [51,27,13,56]
b = dict(enumerate(a))
print(b)

将产生

{0: 51, 1: 27, 2: 13, 3: 56}

enumerate(sequence, start=0)

返回一个枚举对象。sequence必须是序列,迭代器或其他支持迭代的对象。所next()返回的迭代器的方法返回,enumerate()其中tuple包含一个计数(从start开始,默认为0)以及从对序列进行迭代获得的值:


2
@jamylak但无需删除您的。人们可能已经了解count()...
glglgl

@glglgl应该有一种方法可以做到;)
jamylak

用2分钟击败我:)
jcr

48

与另一个构造函数,你有

a = [51,27,13,56]         #given list
d={i:x for i,x in enumerate(a)}
print(d)

7
@StefanoSanfilippo Dict和set comprehensions被反向移植到Python 2.7。
kevingessner 2013年

我站得住了。不过,请记住,这不适用于以前的Python 2版本。
Stefano Sanfilippo,



3

只需使用列表理解即可。

a = [51,27,13,56]  
b = dict( [ (i,a[i]) for i in range(len(a)) ] )
print b
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.