2014-05-24 144 views
0

我寫了這段代碼,我需要一些幫助來調試它。我不得不說,我在這方面本網站看了一些類似的話題,但它不能幫我調試我的代碼:)將字典追加到循環中的另一個字典

OUTPUT:

Number of max devices per route: 4 
Number of routes: 2 
Level of mobility: 2 
routes at T 0 : {0: [28, 14, 7, 4], 1: [22, 0]} 
routes at T 1 : {0: [29, 20, 28], 1: [28]} 
{0: {0: [29, 20, 28], 1: [28]}, 1: {0: [29, 20, 28], 1: [28]}} 

我的問題是,我想有這樣的輸出:

{ 0:{0: [28, 14, 7, 4], 1: [22, 0]} , 1: {0: [29, 20, 28], 1: [28]},} 

但是,我不知道爲什麼最後一本字典在新字典中再次重複。我試圖調試它,但我無法成功。那麼,我怎樣才能將字典附加到循環中的另一個字典?

class myClassName(object): 
    def __init__(self): 
     """ 
     Class constructor. 
     """ 

     self.no_devices = input("Number of max devices per route: ") 
     self.no_routes = input("Number of routes: ") 
     self.mob=input("Level of mobility: ") 
     self.all_routes={} 
     self.routes = {} 

     self.arr = [0,1,2,3,4,5,6,7,8,9,10...,29] 

     for j in xrange(self.mob): 
      for i in range(self.no_routes): 
       random.shuffle(self.arr)           
       self.routes[i] = list(self.arr[0: random.randint(1,self.no_devices)])   
       self.all_routes[j]=self.routes 


      print "routes at T" ,j, ":" ,self.routes 


     print self.all_routes 
+0

如何初始化'self.arr'。在分配任何價值之前它似乎被洗牌了?在沒有完整信息的情況下調試代碼非常困難。 – Marcin

+0

嗨,謝謝你的回覆,self.arr是一個數組,包括0到29之間的數字。 – user3671039

回答

0

由於@shaktimaan指示self.routes在循環的每次迭代中被覆蓋,並且self.all_routes僅保留對self.routes的引用。我修改了代碼,一次使它與python 3.4(即我的Python版本,對不起,我現在不使用2.x)以及解決覆蓋問題。

import random 

class myClassName(object): 
    def __init__(self): 
     """ 
     Class constructor. 
     """ 

     self.no_devices = int(input("Number of max devices per route: ")) 
     self.no_routes = int(input("Number of routes: ")) 
     self.mob = int(input("Level of mobility: ")) 
     self.all_routes={} 


     self.arr = list(range(0,30)) 

     for j in range(self.mob): 
      routes = {} 
      for i in range(self.no_routes): 
       random.shuffle(self.arr)           
       routes[i] = list(self.arr[0: random.randint(1,self.no_devices)])   
       self.all_routes[j]=routes 


      print("routes at T" ,j, ":" ,routes) 


     print(self.all_routes) 



if __name__ == '__main__': 
    myClassName() 

輸出示例:

Number of max devices per route: 4 
Number of routes: 2 
2Level of mobility: 
routes at T 0 : {0: [0, 10], 1: [22, 14]} 
routes at T 1 : {0: [16], 1: [22, 3, 5, 17]} 
{0: {0: [0, 10], 1: [22, 14]}, 1: {0: [16], 1: [22, 3, 5, 17]}} 

希望這將是對你有用。

+0

非常感謝。它的工作原理 – user3671039

+0

@ user3671039很高興能幫到你。如果答案是令人滿意的,接受它將不勝感激。 – Marcin

0

你可以這樣做: orig_dict.update(new_dict)

注:

我想:如果兩個字典有一些類似的按鍵,該值將從new_dict

編輯採摘您可能遇到的問題是因爲您正在用list覆蓋dictroutes & all_routes

+0

tnx for reply。但我不想更新它,我想追加第一個和第二個路線字典到新的。在每次迭代中,我有一個新的路由字典,我想追加所有新的字典包含所有... – user3671039