私はこのような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-Dのリストを持っている:合計値
myList = [ ['A', 1], ['B', 1], ['C', 3], ['A', -1], ['B', 1], ['D', 2] ];
そして、私は次のような結果を持っているしたいと思います:
mySum = [ ['A', 0], ['B', 2], ['C', 3], ['D', 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)すぐにビンが作成されるためです。リストを反復すると、ビンの値を調べ、現在の値と既にビン内の値を合計し、新しい値をビンに戻します。
簡単にパーフェクト! – Khan
は、このコードを試してみてください:
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]]
匿名のダウンボタが再び殴る:D – Tonechas
は正直であるために私達にあなたのコード – depperm
を示し、私はこの問題にこれまでちんぷんかんぷんを持っています。感情アナライザーを書いて、私が設計したメトリックのための単語を記録しようとしました。それが問題に何かを加えるならば。 – Khan