2017-08-24 11 views
1

これは私の慰めの範囲外の方法です。私は十分に説明できるかどうかもわかりません。私はdictsの別のリストを含むdictsのリストであるファイルを持っています。データ構造の抜粋は以下の通りです:は、ディクテーションのリストを含むディクテーションのリストに値を結合します。

j_traffic = 
[ 
    { 
    "timePeriod": "2017-08-04T15:20:00.000+0000", 
    "applicationTrafficPerApplication": [ 
     { 
     "applicationId": 39, 
     "applicationName": "HTTP", 
     "trafficInboundBps": 148760, 
     "trafficOutboundBps": 5673493, 
     "trafficWithinBps": 0 
     }, 
     { 
     "applicationId": 41, 
     "applicationName": "HTTPS", 
     "trafficInboundBps": 16805, 
     "trafficOutboundBps": 546937, 
     "trafficWithinBps": 0 
     } 
     ] 
    }, 
    { 
    "timePeriod": "2017-08-04T15:15:00.000+0000", 
    "applicationTrafficPerApplication": [ 
     { 
     "applicationId": 39, 
     "applicationName": "HTTP", 
     "trafficInboundBps": 157569, 
     "trafficOutboundBps": 5769206, 
     "trafficWithinBps": 0 
     }, 
     { 
     "applicationId": 41, 
     "applicationName": "HTTPS", 
     "trafficInboundBps": 17454, 
     "trafficOutboundBps": 590421, 
     "trafficWithinBps": 0 
     }, 
     { 
     "applicationId": 44, 
     "applicationName": "DNS", 
     "trafficInboundBps": 18218, 
     "trafficOutboundBps": 13683, 
     "trafficWithinBps": 0 
     }, 
     { 
     "applicationId": 45, 
     "applicationName": "SNMP", 
     "trafficInboundBps": 14, 
     "trafficOutboundBps": 0, 
     "trafficWithinBps": 0 
     } 
     ] 
    }, 
    { 
    "timePeriod": "2017-08-04T15:05:00.000+0000", 
    "applicationTrafficPerApplication": [ 
     { 
     "applicationId": 39, 
     "applicationName": "HTTP", 
     "trafficInboundBps": 139897, 
     "trafficOutboundBps": 5073320, 
     "trafficWithinBps": 0 
     }, 
     { 
     "applicationId": 41, 
     "applicationName": "HTTPS", 
     "trafficInboundBps": 22592, 
     "trafficOutboundBps": 457962, 
     "trafficWithinBps": 0 
     }, 
     { 
     "applicationId": 44, 
     "applicationName": "DNS", 
     "trafficInboundBps": 19903, 
     "trafficOutboundBps": 14033, 
     "trafficWithinBps": 0 
     } 
     ] 
    } 
] 

私はキーと値がキー「trafficInboundBps」のすべての値の合計ですように私は「のapplicationName」値を使用して新しい辞書を作成することができる方法を理解しようとしていますそれは次のようになります。

inboundTraffic = { "HTTP":446316、 "HTTPS":56581、 "DNS":38121、 "SNMP":14}

私は私がここで見つかった提案を試してみました入れ子にされたレベルを次のように解析する方法について私の頭を抱くことはできません: inboundTraffic = dict.fromkeys(set()。union(* j_traffic))

お手数ですか?

ありがとうございました!

答えて

0

j_trafficリストを処理し、期待される出力を得るための単純で単純なコードです。

output = dict() 
# iterate over the list of outer dicts 
for outer_dict in j_traffic: 
    # grab the list assigned to key applicationTrafficPerApplication 
    application_traffic_per_application = outer_dict['applicationTrafficPerApplication'] 
    # iterate over the list of inner dicts 
    for inner_dict in application_traffic_per_application: 
     application_name = inner_dict['applicationName'] 
     traffic_inbound_bps = inner_dict['trafficInboundBps'] 
     if application_name in output: 
      output[application_name] += int(traffic_inbound_bps) 
     else: 
      output[application_name] = int(traffic_inbound_bps) 

print(output) 
0

これは、あなたが求めているものを行うための1つの可能性である:

# Extract outer dictionaries as a list 
lst = [s["applicationTrafficPerApplication"] for s in j_traffic] 

# Turn first element of lst into a dictionary 
inboundTraffic={s2["applicationName"]: s2["trafficInboundBps"] for s2 in lst[0]} 
# Process remaining elements - combine and add 
for comp in lst[1:]: 
    temp = {s2["applicationName"]: s2["trafficInboundBps"] for s2 in comp} 
    # This turns both dictionaries into sets, selects all elements 
    # (I assume that's why it's using sets - to have access to all), 
    # then adds the resepective elements - 0 in .get(k,0) signifies that 
    # "0" will be added if particular element doesn't exist in the second set/dictionary 
    inboundTraffic = {k: inboundTraffic.get(k,0) + temp.get(k,0) for k in set(inboundTraffic) | set(temp)} 

print inboundTraffic 

を私は短く、より適切な解決策がある賭けるので、私はまだ物事のニシキヘビの方法を学んでいる - しかし、これは確かにありませんトリック。

forループの最後の行は、この投稿Merge and sum of two dictionariesによるものです。

アウトプットをソートしますか?

関連する問題