2014-03-26 26 views
-2
def taskCompletionCheck(self, jsonFile): 

     json_data=open(jsonFile) 
     data = json.load(json_data) 
     json_data.close() 
     wsTaskStatus = {} 
     taskstatus = {} 
     mydict = {} 

     ''' Assuming the json file structure is similar to 
     {"tasks": 
      [{"name":"SA","result":"PASS"}, 
      {"name":"CR","result":"PASS"}, 
      {"name":"UT","result":"fail"}], 
     "masks":{"id":"valore"}, 
     "om_points":"value", 
     "parameters":{"id":"valore"}} 
     ''' 
     for item in data: 
      keyExists = data[item].get("auto-approve-plugin-status") 

      if keyExists != None: 
       for elem in data[item]["auto-approve-plugin-status"] : 
        mylist = elem["auto-approve-enclosure-names"] 

        mydict["status"] = elem["auto-approve-status"] 
        mydict["enclosure-names"] = mylist 
        taskid = elem["auto-approve-plugin-name"]+"_"+item 
        taskstatus[taskid] = mydict 
     print taskstatus 
     return taskstatus 

當我宣佈在全球範圍內mydict(外for循環),taskstatus將不包含MYLIST,磁盤陣列的名稱值將只包含O的。後來我將mydict放在for循環中,它工作正常。任何人都可以解釋我發生了什麼事範圍的字典的

if keyExists != None: 
        for elem in data[item]["auto-approve-plugin-status"] : 
         mydict = {} 
         mylist = elem["auto-approve-enclosure-names"] 

         mydict["status"] = elem["auto-approve-status"] 
         mydict["enclosure-names"] = mylist 
         taskid = elem["auto-approve-plugin-name"]+"_"+item 
         taskstatus[taskid] = mydict 

這是taskstatus會是什麼樣子:

{"CR" : {"status" : "fail" , "enclosure-names" : [a,b,c]}, 
    "UT" : {"status" : "pass" , "enclosure-names" : [d,e]}} 
+0

此代碼無效,有一個返回語句,但沒有功能。我建議將給你一個問題的確切代碼複製到一個單獨的文件中,並試圖讓它在隔離其他代碼的情況下運行。一旦運行,請將其複製到您的問題中。 – 2014-03-26 01:11:59

回答

2

在原來的版本,此代碼:

mydict["status"] = elem["auto-approve-status"] 
mydict["enclosure-names"] = mylist 

通過循環每一次,正在重用相同 mydict,每次覆蓋您在前一個循環中放置的內容。

當您在循環內添加mydict = {}時,每次循環創建一個新的單獨字典,然後您不重複使用或覆蓋任何內容,並且它可以正常工作。

+0

是的,我意識到在外面宣佈它是一個錯誤,但它應該至少給我垃圾值是正確的?爲什麼它給我所有的0? – user892871

+0

@ user892871哦,我明白了;我不知道。你在引用中有一個關於taskstatus看起來如何的錯字:'「enclosre-names」'。 o的在哪裏?你是如何打印/查看它們的,有多少種,哪種圖案? – TessellatingHeckler

+0

嗯。好。我編輯了我的代碼。在返回之前我正在打印taskstatus。 「CR」:{「status」:「fail」,「enclosure-names」:[0]}, 「UT」:{「status」:「pass」,「enclosure-names 「:[0]}} – user892871