2010-05-17 96 views
0

我正在處理一個比內存綁定更多的cpu綁定的應用程序,並且我試圖合併兩件事情,不管它們是列表還是字典。速度更快:在Python中合併列表或字典?

現在的事情是我可以選擇任何一個,但我想知道如果合併字典將更快,因爲它都在內存中?或者它總是O(n),n是較小列表的大小。

我詢問有關字典而不是集合的原因是因爲我無法將集合轉換爲json,因爲{key1,key2,key3}和json中的結果需要鍵/值對,所以我使用了字典,所以json轉儲返回{key1:1,key2:1,key3:1}。是的,這是浪費,但如果證明速度更快,那我就沒問題。

編輯:我的問題是使用字典和列表合併的區別,我原本錯誤地設置了字典和列表。

dict1 = { 「該」:{ 「1」:1, 「3」:1, 「10」:1}

dict2 = { 「該」:{ 「11」:1,「13 「:1}}合併後

dict3 = {」 該」:{ 「1」:1, 「3」:1, 「10」:1, 「11」:1, 「13」 :1}

+0

你能舉一個例子說明你的意思是「合併」嗎?你的意思是刪除重複? – gahooa 2010-05-17 03:29:36

+0

我更新了這個問題,解決了你說的 – tipu 2010-05-17 04:28:05

回答

2

如果你正在尋找重複消除,套是非常,非常快。

>>> x = set(range(1000000,2000000)) 
>>> y = set(range(1900000,2900000)) 

the following happened in ~0.020s 
>>> z = set.intersection(x,y) 
>>> len(z) 
100000 

關於輸出到JSON,只是轉換到一個列表...

json_encode(list(z)) 
+0

,但是轉換爲列表的時間呢? – 2010-05-17 03:36:43

1

您可以使用timeit模塊來測量代碼的速度,但我會猜測它們幾乎是相同的(因爲一組可能是使用字典實現的)。

1

指點和設置將會一樣快(和O(N),你猜測)。您只在Q的標題中提到並且從未在文本中提到的列表可能會比較慢,具體取決於「合併」的含義。

鑑於json下游需求,所有值設置爲1的字典將是整體上最快的 - 不是用於合併,而是用於JSON序列化。

0

我會更擔心的正確性。如果您有重複的密鑰,該列表將複製您的密鑰和值。字典只會保留其中一個值。此外,清單將保持訂單的一致性。你喜歡哪個?

我的直覺反應是,如果你正在搜索鍵字典會更快。但是,你將如何處理重複?

0

正如Michael所說,使用timeit模塊可能是最容易的,請親自看看。這很容易做到:

import timeit 
def test(): 
    # do your thing here 
    # including conversion to json 
    pass 

result = timeit.repeat(test, repeat=10, number=10000) 
print '{0:.2}s per 10000 test runs.'.format(min(result)) 

希望有幫助。