我是Python新手,正在使用NetworkX來構建圖形。迭代3個字典(關注速度)
在我的腳本我有三個字典這或許需要被嵌套在彼此內:
- dict1 = { '節點ID':1} - >
dict1={'0':1,'1':1,'2':1, ...}
- dict2 = { '節點ID' :G.neighbors(節點ID)} - >
dict2={'0':[1,2,4], ...}
- dict3 = { '節點ID':狀態} - >
dict3={'1':1, '2':0, '4':1}
爲了一清二楚,dict1
告訴我,如果該節點有效(1)或失敗(0)[在這種情況下,所有節點dict1
都處於活動狀態]。 dict2
包含連接到每個節點dict1
的所有節點; dict3
告訴我連接到dict1
的每個節點的所有節點是活動(1)還是失敗(0)。
我的問題。我希望能夠建模節點之間的交互。這意味着如果節點0
處於活動狀態(status=1
)並且有3個節點連接到它,如果它們全都失敗(status=0
),則節點0
也會失敗。如果只有一個連接的節點仍處於活動狀態,則節點0
仍然處於活動狀態。
我的企圖。這是理論上的流程我已經設想,但我不知道怎麼把它翻譯成Python,我也不知道這是不是最好的辦法:
- 遍歷dict1;
- 對於dict1的每個鍵,獲取與當前dict1鍵相關聯的dict2的值;
- 對於在dict2中找到的每個值,請檢查dict3它們的狀態是0還是1(在dict2中找到的值成爲dict3的關鍵字);
- 如果(且僅當)中的所有dict3鍵發現這種方式取0,改變與當前dict1鍵相關聯的值設置爲0
PS:該流程圖是將被施加到一個10000個節點的網絡,所以重點在於速度。嵌套3 for循環可能聽起來像一個(非常)糟糕的主意,所以我會很感激不同的解決方案。
我很抱歉無法將此代碼放入正確的代碼,但我非常掙扎。非常感謝!
您不必在3個字符上循環,因爲它們可以直接訪問它們的值。你只需要在dict1鍵集中進行迭代。但是你的主要問題是你可以用一組對象做你想做的事情。 – JoshRomRock
謝謝!你能爲我提供一個「實驗」嗎?我發現字典的地區充滿了可能的地雷...... – FaCoffee
您是否嘗試設置一個節點類,其中包含字段node_id,鄰居(作爲節點列表)和狀態?把它們放在一個集合中,然後遍歷它來應用你的規則。備註:我不知道NetworkX,所以我不確定你想要的輸出。 – JoshRomRock