2016-12-01 13 views
0

私が書いているコードをいくつか持っていて、APIコールのしたことを真似しようとしています。ただし、同じキーを持つAPI呼び出しに入れることができる複数のエントリがあります。たとえば、メソッドへの呼び出しを見ると、複数のnames[]がAPI呼び出しの一部として渡されます。ここで複数の辞書エントリを1つのキーに結ぶ

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[]値をプリントアウトされます。これをどうすれば解決できますか?

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の最後の値が常に維持することを意味します:あなたが行に辞書temp"names[]"からではなく、同じキーを持つtemp[k] = s異なる値を書き込むためだ

おかげ

答えて

1

names[]という1つの(最後の)値だけです。

もう一つは、それは価値がisオペレータとNoneに等しいかどうかを確認すると良いでしょうです:両方names[]値を渡すには

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

同時にあなたは、その値を分割requests.getを使用してnames[]を渡す必要はありませんリストは:

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

それは次のようになめらかとして要求されます

関連する問題