2013-04-04 97 views
0

我有一些來自不同來源的輸入。輸入是鍵值對形式。鍵是'a.b.c'形式的。來自不同來源的鍵可以是相同的,在這種情況下,我必須做一組所有的值。python數據結構暗示

事情,我需要用數據結構做的事:

  • 我應該能夠檢索所有鍵和值特定源ID
  • 考慮的一個關鍵,我應該能夠找出所有與它相關的值,而不考慮源ID。

我想要一個或多個空間高效的數據結構,我可以用它來實現這一點。我原本想保留2張地圖:一張用於源ID和鍵值,另一張用於鍵值和值。但在這裏,我正在失去源代碼到值映射。

速度/空間要求: 獲得每個鍵的值列表的速度很重要;維護這些數據結構所需的內存也是如此。將此數據結構和源ID構建到鍵/值檢索速度所花費的時間並不重要。

有什麼建議嗎?

回答

0

您可以稍微修改一下您的想法:保留一個將源與(鍵,值)對相關聯的字典,以及另一個將值與一組值關聯的字典。這應該是快速構建/更新(添加一個條目需要兩個字典查找和列表/集插入),並且不需要太多的內存開銷。然後,每個查找操作只需要一個單獨的字典。

請注意,這隻會使指向實際數據的指針數量增加一倍;如果這些值很大,那麼內存使用量將會少於一倍。但是,如果這是個問題,並且您不介意將源代碼ID更改爲鍵值查找,那麼您只能存儲從鍵到(源,值)對的字典。然後,你可以通過

vals_for_key = [val for source, val in the_dict[key]] 

和鍵值對來自給定源通過

keyvals_for_source = [(key, val) 
         for key, items in the_dict.iteritems() 
         for src, val in items 
         if src == source] 
+0

感謝獲取給定鍵的所有值。這會起作用,但這似乎是公平增加的記憶。對我而言效率低下的原因是我們保留**幾乎**相同的信息兩次,即鍵/值對 – user2121826 2013-04-04 02:26:57

+0

@ user2121826如果這是一個問題,請參閱我的編輯以獲得更有效的內存方式。 – Dougal 2013-04-04 02:38:41

+0

這似乎好多了..讓我試試這個。謝謝! – user2121826 2013-04-04 03:36:08