簡體   English   中英

從列表創建字典

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM