2016-01-17 85 views
1

我正在試圖創建一個區域類來總結json字符串中鍵區域的所有實例。在json對象中尋找鍵值

例如e = Area('[1, 2, 3, {"area": 123, "weight": 1000}]')應該返回e=123Area('["Hello", "World", {"area": 999}, {"area": 1}]')應該回到1000

目前我正準備返回0每次和我想這可能是因爲我初始化sum太早還是因爲我的索引進入字符串可能會關閉。

import json 
class Area: 

    def __init__(self, txt): 
     self.txt=txt 

    def __str__(self): 
     sum=0 
      for a in self.txt: 
       if a == 'area': 
        sum+=int(self.txt[a]}) 
     return str(sum) 

回答

0

這是有效的。

然後,您應該測試列表中的每個元素,看它是否包含項目area,您應該記住,並非列表中的所有項目都將支持in運算符,因此請將其包含在異常塊中。

最後,你在__str__方法中做了所有這一切似乎很奇怪。這可能是最好有,使用json.loads是罰款返回

import json 

class Area: 
def __init__(self, txt): 
    self.txt = json.loads(txt) 

def __str__(self): 
    sum = 0 
    for a in self.txt: 
     try: 
      if 'area' in a: 
       sum += int(a['area']) 
     except TypeError: 
      pass 
    return str(sum) 


print Area('[1, 2, 3, {"area": 123, "weight": 1000}]') 
print Area('["Hello", "World", {"area": 999}, {"area": 1}]') 
1

的方法,但你需要確保你有一個字典,你可以用isinstance做,你可以使用內置的sum函數來進行求和您。

import json 
class Area: 
    def __init__(self, txt): 
     self.txt = txt 
    def __str__(self): 
     return str(sum(d.get("area", 0) for d in json.loads(self.txt) 
        if isinstance(d, dict))) 

輸出:

In [8]: e = Area('[1, 2, 3, {"area": 123, "weight": 1000}]') 

In [9]: print e 
123 
In [10]: e = Area('["Hello", "World", {"area": 999}, {"area": 1}]') 

In [11]: print e 
1000 

在自己的代碼你遍歷字符的字符串中,你永遠不會調用loads所以if a == 'area':將永遠不會真正爲您比較「區域」每一個人char,因爲你的代碼也會出錯,因爲self.txt[a]}是無效的語法。