[英]Create a dictionary from a list
如果我想創建一個大詞典,那么假設我只是想按這樣分配值,那將是最有效的方法:
{'item1':'0','item2':'1','item3':'2','itemn':'n-1'}
我在這里看到了很多關於只為所有鍵分配相同值的信息,但是關於如何根據需要分配值卻一無所獲。
謝謝。
編輯 :我要這樣做的原因是因為我已經將某人的代碼交給了殘酷的人(無論如何我不是一個熟練的程序員),並且我們有一個由ID表示的對象列表編號:5432、8976等。
有幾百個。 好吧,而不是像原始代碼那樣,將列表視為一個數組,然后找到它的range(len(my_list))
以獲取每個對象的獨立值,我認為只用鍵創建字典可能會更好/ values,只聲明一次並稍后引用它,而不是調用數組或在這種情況下每次都重新創建數組。 這是一個合理的主意嗎? 我不知道,但是我想嘗試一下。
試試這個命令:
d = dict(zip(your_list, range(len(your_list)))
dict(x[i:i+2] for i in range(0, len(x), 2))
{item: str(i) for i, item in enumerate(my_list)}
答案似乎取決於您所使用的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中不返回列表,而僅返回迭代器…
dict(("item%d"%i,val) for i,val in enumerate(my_list,1))
想必
如果您現在不關心分配的值,從列表構建字典的最快方法是dict.fromkeys(mylist)
:
In [13]: mylist = ["stuff", "more stuff"]
In [14]: dict.fromkeys(mylist)
Out[14]: {'more stuff': None, 'stuff': None}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.