如果我有一个大型列表,我想创建一个字典,那么最有效的方法是假设我只想分配值:
{'item1':'0','item2':'1','item3':'2','itemn':'n-1'}
我在这里看到很多关于为所有键分配相同的值,但没有关于如何根据需要分配值。
感谢。
编辑:我想这样做的原因是因为我被交给某人的代码是残暴的......(不是说我是一个技术熟练的程序员),而我们有一个由ID号代表的对象列表:5432,8976等。
有几百个。好吧,而不是像原始代码那样,将列表视为数组,然后找到它的range(len(my_list))
来获取每个对象的标记值,我是思考它可能更好使用键/值创建一个字典,声明一次并稍后引用它而不是调用数组或者 - 在这种情况下 - 每次都重新创建数组。这是一个合理的想法吗?我不知道,但我想尝试一下。
答案 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}