从列表中创建字典

时间:2013-07-18 22:43:15

标签: python dictionary

如果我有一个大型列表,我想创建一个字典,那么最有效的方法是假设我只想分配值:

{'item1':'0','item2':'1','item3':'2','itemn':'n-1'}

我在这里看到很多关于为所有键分配相同的值,但没有关于如何根据需要分配值。

感谢。

编辑:我想这样做的原因是因为我被交给某人的代码是残暴的......(不是说我是一个技术熟练的程序员),而我们有一个由ID号代表的对象列表:5432,8976等。

有几百个。好吧,而不是像原始代码那样,将列表视为数组,然后找到它的range(len(my_list))来获取每个对象的标记值,我是思考它可能更好使用键/值创建一个字典,声明一次并稍后引用它而不是调用数组或者 - 在这种情况下 - 每次都重新创建数组。这是一个合理的想法吗?我不知道,但我想尝试一下。

6 个答案:

答案 0 :(得分:2)

尝试此命令:

d = dict(zip(your_list, range(len(your_list)))

答案 1 :(得分:1)

dict(x[i:i+2] for i in range(0, len(x), 2))

答案 2 :(得分:1)

{item: str(i) for i, item in enumerate(my_list)}

答案 3 :(得分:1)

答案似乎取决于您使用的是哪个版本的Python。

这些是我在Python 2.7.3上使用IPython 0.13的结果:

In [11]: mylist = ["item{}".format(i) for i in range(10**7)]

In [12]: %timeit d = dict(zip(mylist, range(len(mylist))))
1 loops, best of 3: 6.97 s per loop

In [13]: %timeit d = {item: i for i, item in enumerate(mylist)}
1 loops, best of 3: 3.68 s per loop

In [14]: # Edit: xrange is faster than range in Python 2    

In [15]: %timeit d = dict(zip(mylist, xrange(len(mylist))))
1 loops, best of 3: 5.58 s per loop

这就是我在Python 3.3.2上使用IPython 0.13获得的:

In [5]: mylist = ["item{}".format(i) for i in range(10**7)]

In [6]: %timeit d = dict(zip(mylist, range(len(mylist))))
1 loops, best of 3: 2.62 s per loop

In [7]: %timeit d = {item: i for i, item in enumerate(mylist)}
1 loops, best of 3: 2.92 s per loop

这可能是因为zip在Python 3中没有返回列表而只返回迭代器...

答案 4 :(得分:0)

dict(("item%d"%i,val) for i,val in enumerate(my_list,1)) 

想必

答案 5 :(得分:0)

如果您现在不关心指定的值,从列表中构建字典的最快方法是dict.fromkeys(mylist)

In [13]: mylist = ["stuff", "more stuff"]

In [14]: dict.fromkeys(mylist)
Out[14]: {'more stuff': None, 'stuff': None}