2013-12-16 90 views
0

這是一個概念性問題,我需要實例化一些網絡模擬的「節點」。命名是問題 - 我需要一種方法來爲實例自動生成名稱(任何允許我在創建後跟蹤和引用節點的方法)實例化的動態命名

更好地瞭解我需要什麼,下面是最需要的的循環會看起來像是用問號所在的主題標籤來表示的。 x和y將在父函數中定義。

for n in range(1000): 
     #n, but somehow converted into the name of the dict# = { 
      'address':n, 
      'resistance':x, 
      'special':[], 
      'parent':y, 
      'children':[], 
      'adjnodes':[] 
    } 

作爲noob的道歉。我已經搜索了高和低的答案,如果這是明顯的,那麼我濫用術語或什麼;在這種情況下,請讓我知道使用什麼行話,我會抓住我的帽子,並在我的路上。不是諷刺,只是在必要時更喜歡被嚴厲地教導。謝謝。

+0

我不除了個人軼事之外,還有很多要補充的 - 我知道了。不是這個確切的問題,但是當我們發現一個清除過程沒有正確運行時,我不得不輪詢〜100臺機器並且拉出一些文件大小信息。我使用了我正在檢查的文件的名稱作爲每個變量,而我爲了使該方法正常工作而需要做的monkeywrenching和hackjob編碼是IMMENSE。我將不再維護這些代碼 - 如果它需要認真更新,我會從頭開始重新編寫它,知道我現在知道的。 請按照您的回答者的建議:保持您的變量數據不變。 –

+0

這就是爲什麼PHP優於python:http://www.php.net/manual/en/language.variables.variable.php (開玩笑,downvote釣魚不是笨的請:-) – vincent

+0

@vincent: Nah,Tcl優於兩者。 'eval'是做所有事情的唯一真正方法,所以你不必記住任何花哨,高效或安全的東西,因爲沒有這樣的東西存在。 :) – abarnert

回答

4

聽起來好像你正在試圖將這些變量創建爲一堆單獨的變量,然後將變量的名稱存儲在每個變量的address字段中。

不要這樣做。有關原因的解釋,請參閱Keep data out of your variable namesWhy you don't want to dynamically create variables。但簡短的版本是,試圖這樣做是你首先遇到問題的唯一原因。

爲什麼不只是創建所有節點的單個list?那麼你的address就可以成爲該列表的索引。例如:

nodes = [] 
for n in range(1000): 
    nodes.append({ 
     'address':n, 
     'resistance':x, 
     'special':[], 
     'parent':y, 
     'children':[], 
     'adjnodes':[] 
    }) 

或者,如果您打算進行添加和你走刪除節點,所以列表索引不會保持一致,只是用一種dict

nodes = {} 
for n in range(1000): 
    nodes[n] = { 
     'address':n, 
     'resistance':x, 
     'special':[], 
     'parent':y, 
     'children':[], 
     'adjnodes':[] 
    } 
+0

會問這個,但在別處找到它。想知道如何使用節點特有的函數和類。這傢伙有一個超級光滑的答案 http:// stackoverflow。com/questions/1208322/dictionary-with-classes shapes = {'1':Square,'2':Circle,'3':Triangle}#只是字典中的類名 x = shapes [raw_input( )]()#從dict中獲取類,然後調用它來創建一個形狀實例。 – user3100457

1

如果n有意義,可以將這些dict中的每一個放入另一個dict,其中n作爲關鍵字。

如果n沒有意義,只需將這些dict s添加到list

無論哪種方式,請將您的數據保留在變量名稱之外。