2011-08-29 29 views
0

我在我的代碼中有一個非常醜陋的循環,這實際上減慢了我的程序。循環基本上執行字典比較,其中如果dict_A中的特定鍵與dict_B中的相同,則對於所有匹配,執行將被寫入文件的排序。幫助加快Python中的字典排序循環?

for k, v in A_dict.items(): 
    for i, value in B_dict.items(): 
     if k == value[0]: 
      sorted_B = [list(value) for key, value in groupby(sorted(B_dict.values()), key=itemgetter(1,2))] 
      outfile.write('{0}\t{1}\t{2}\t{3}\t{4}\t{5}\n'.format (i, k, v, value[1], value[2], value[3]) 

不幸的是,在字典中都包含了一萬件。除了把這些數據放入數據庫然後排序,沒有人有任何建議如何加快這個循環?謝謝您的幫助。

+0

你的代碼比較了一個鍵和一個值,但是你的文本描述了只比較值。那麼什麼是「匹配」?價值觀是一樣的嗎?另外,當你使用'items()'方法時,會創建一個新的列表。您可以使用A_dict中的鍵直接從B_dict中獲取。 – Keith

+0

@凱斯謝謝你的收穫。希望我的問題現在已經很清楚了 - 我將匹配一個字典(dict_A)中的密鑰與另一個字典中的值(dict_B) – drbunsen

+0

因此,當您匹配時,您想要寫入文件的內容是什麼? – agf

回答

1

你的示例代碼可能是不準確的,但寫的,

sorted_B = [list(value) for key, value in 
       groupby(sorted(B_dict.values()), key=itemgetter(2,3))] 

會每次都在同...爲什麼它在一個循環呢?

而且

for k, v in A_dict.items(): 
    for i, value in B_dict.items(): 
     if k == value[0]: 
      outfile.write('{0}\t{1}\t{2}\t{3}\t{4}\t{5}\n'.format(
       i, k, v, value[1], value[2], value[3]) 

看起來像它可能只是被寫成

for i, value in B_dict.items(): 
    k = value[0] 
    if k in A_dict: 
     outfile.write('{0}\t{1}\t{2}\t{3}\t{4}\t{5}\n'.format(
      i, k, A_dict[k], value[1], value[2], value[3]) 

這應該是更快的 - 它的線性時間,而不是二次時間。

+0

一如既往,感謝您的幫助。我試圖把sorted_B放在循環中,這樣只需要對'if k == value [0]:'進行排序的項目。 – drbunsen

+0

儘管你正在排序整個字典,而不僅僅是匹配的項目。你想得到所有匹配項目的清單然後排序? – agf

+0

我不知道我是否理解你如何重寫字典匹配循環 - 特別是'k = value [0]'.'k'是字典的關鍵。這不會重新將k從另一個詞典中重新賦值[0]。對不起,如果我不清楚。 – drbunsen