所以我有一個75000個元組的列表,我想推入一個字典。看起來在大約20,000個條目之後,整個程序變慢了,我認爲這是因爲字典在被填滿時被動態調整大小。初始化一個帶有未知鍵的大字典?有沒有比這更好的方法?
根據數據,字典中使用的鍵值位於元組中的不同位置,所以我不能將元組列表中的鍵從列表中提取到列表x並調用d.fromkeys(x)預先初始化大字典。我試過把一個解決方案放在一起,但在字典由ast.literal_eval評估後,我得到的是一個{'None':'None'}:/
我的溶液(不起作用) 。
d_frame = '{'+('\'None\': \'None\',' * 100000)+'}'
d = ast.literal_eval(d_frame)
是否有這樣的一個內置的方法..
感謝,
編輯:我知道我的想法的愚蠢..顯然,你不能有相同的鍵在字典中....:/
只是爲了澄清,我有元組的數據像這樣的列表:
(assembly,strand,start_pos,end_pos,read_count)
key_format : assembly_strand_val (where val = start_pos or end_pos depending on other factors)
因爲直到我評估每個元組時我才知道密鑰,所以我不能用已知的密鑰初始化字典,所以只是想知道我是否可以創建一個空字典,然後添加它。它沒有任何意義剔除每個元組只是爲了建立一個列表,然後創建一個字典然後重複元組的評估...
編輯:我意識到瓶頸是哪裏..與每個元組,我檢查,看看相關的密鑰已退出字典,但我正在使用;
if key not in dict.keys():
dict[key] = foo
我並沒有意識到這一點,每次構建鍵的列表,並可以與經濟得多
if key not in dict:
dict[key] = foo
改變這種導致速度達到了驚人的增長所取代....
如果你有10萬項這些都是完全相同的,你只會得到一個有1個條目的字典,而不是100K。那實際上是你想要的嗎? – abarnert 2014-09-04 02:07:19
作爲一個方面說明,你不需要寫''\'無\'... \'無\',';只寫'''無':'無',''。 – abarnert 2014-09-04 02:09:32
元組中的關鍵位置如何依賴於數據?任何示例? – 2014-09-04 02:12:18