2016-07-19 17 views
0

私はこのような2-Dのリストを持っている:合計値

myList = [ ['A', 1], ['B', 1], ['C', 3], ['A', -1], ['B', 1], ['D', 2] ]; 

そして、私は次のような結果を持っているしたいと思います:

mySum = [ ['A', 0], ['B', 2], ['C', 3], ['D', 2] ]; 

は私を試してみました最高ですが、なんとなく合理的な優雅な答えはまだ見つかりません!

+2

は正直であるために私達にあなたのコード – depperm

+0

を示し、私はこの問題にこれまでちんぷんかんぷんを持っています。感情アナライザーを書いて、私が設計したメトリックのための単語を記録しようとしました。それが問題に何かを加えるならば。 – Khan

答えて

2

これはかなり単純なビニング操作です。 collections.defaultdictは美しく動作します:

from collections import defaultdict 
d = defaultdict(int) 

for k, v in myList: 
    d[k] += v 

print d.items() # print(list(d.items())) on python3.x 

基本的には、dictのは、ビン('A''B''C'、...)と値(そのビンの現在の合計)を保持しています。 defaultdictを使用します。ビンがない場合は、必要に応じて(初期値0)すぐにビンが作成されるためです。リストを反復すると、ビンの値を調べ、現在の値と既にビン内の値を合計し、新しい値をビンに戻します。

+1

簡単にパーフェクト! – Khan

-1

は、このコードを試してみてください:

In [69]: from itertools import groupby 

In [70]: from operator import itemgetter 

In [71]: myList = [['A', 1], ['B', 1], ['C', 3], ['A', -1], ['B', 1], ['D', 2]] 

In [72]: [[letter, sum(map(itemgetter(1), group))] for letter, group in groupby(sorted(myList), key=itemgetter(0))] 
Out[72]: [['A', 0], ['B', 2], ['C', 3], ['D', 2]] 
+0

匿名のダウンボタが再び殴る:D – Tonechas