2017-05-02 12 views
1

のリストで非共通変数の和を検索します。私はPythonで辞書のリストを持っている分、最大および辞書

dict_list = [ {"k1" : "abc", "k2": "v2", "k3": "v3", "k4": 2}, 
       {"k1" : "v21", "k2": "v22", "k3": "v23", "k4": 5}, 
       {"k1" : "abc", "k2": "v2", "k3": "v3", "k4": 10} ] 

一般的なk1、k2、k3フィールドには、最小/最大と「k4」の合計を取得する必要があります。上記のdict_listの例では、出力は次のようになります。

[ 
{"k1" : "abc", "k2": "v2", "k3": "v3", "min": 2, "max": 10, "sum": 12}, 
{"k1" : "v21", "k2": "v22", "k3": "v23", "min": 5, "max": 5, "sum": 5} 
] 

一般的なフィールドを取得するには、カウンタコンテナを使用する予定です。

counter_out = Counter((d["k1"], d["k2"], d["k3"]) for d in dict_list) 

次にcounter_outを使用して元のdict_listを反復することを計画しています。これにはより良いアプローチがありますか?

答えて

0

Counterさんはあなたにminmaxsumをどのように渡すかわかりません。おそらく最も簡単な方法は、キーと値のリストとして('k1', 'k2', 'k3')との中間の辞書を作成することです。
そして、それはあなたが探しているdict構造、例えばにこのバックを変換するために比較的簡単である:助け

In [1]: 
from collections import defaultdict 
t = defaultdict(list) 
for d in dict_list: 
    t[tuple(d[k] for k in ['k1', 'k2', 'k3'])].append(d['k4']) 

[{'k1':k[0], 'k2':k[1], 'k3':k[2], 'min':min(v), 'max':max(v), 'sum':sum(v)} 
for k, v in t.items()] 

Out[1]: 
[{'k1': 'abc', 'k2': 'v2', 'k3': 'v3', 'max': 10, 'min': 2, 'sum': 12}, 
{'k1': 'v21', 'k2': 'v22', 'k3': 'v23', 'max': 5, 'min': 5, 'sum': 5}] 
+0

おかげで、。 – Genius

関連する問題