2016-12-01 57 views
0

我有一些我正在編寫的代碼,它試圖模仿API調用的功能。但是,可以將多個條目放入具有相同鍵的API調用中。例如,如果您查看我對該方法的調用,則會有多個作爲API調用一部分傳遞的names[]將多個字典條目綁定到一個密鑰

names[]": ["System/CPU/User/percent", "System/CPU/System/percent"]

這裏是有碼 -

def new_relic_api(api_key, query_function, datapoints): 
    temp = {} 

    if (datapoints != None): 
     for k, v in datapoints.iteritems(): 
      if isinstance(v, list): 
       for s in v: 
        print (k) 
        print s 
        temp[k] = s 

      else: 
       print k 
       print v 
       temp[k] = v 

    r = requests.get(url, headers=headers, data=temp) 

d = {"names[]": ["System/CPU/User/percent", "System/CPU/System/percent"], "values[]": "average_value", 'from': '2016-11-30T18:31:00+00:00', 'to': '2016-11-30T19:01:00+00:00', 'summarize': 'true'} 
new_relic_api("${api_key}", "/servers/{server_id}/metrics/data.json", d) 

然而,實際的字典裏面只有的請求調用打印出的第二names[]值。我怎樣才能解決這個問題?

感謝

回答

1

那是因爲你寫入字典temp本着從"names[]"但使用相同的密鑰temp[k] = s不同的值:

items = {} 
k = "names[]" 
for s in ["System/CPU/User/percent", "System/CPU/System/percent"]: 
    items[k] = s 
# items == {"name[]": "System/CPU/System/percent"} 

這意味着s最後一個值改寫items[k]items將始終保持只有一個(最後一個)值爲names[]

的另一件事是它更好地檢查一個值等於Noneis操作:

if value is None: pass 
if value is not None: pass 

要同時通過這兩個names[]值,你不需要拆自己的價值觀,用requests.get並通過names[]作爲清單:

temp = {"names[]": ["System/CPU/User/percent", "System/CPU/System/percent"]} 
r = requests.get(url, headers=headers, data=temp) 

將要求類似於水木清華:

url?names[]=System/CPU/User/percent&names[]=System/CPU/System/percent 
相關問題