3

次のような値を持つファイルがあります。

123 9   
111 5   
12 1   
123 4   
12 4   
109 5   
12 4    
35 7   
111 4   
124 6  

次に、次のような出力を生成する必要があります。

123 13  
111 9  
12 5  
109 5  
35 7  
124 6

つまり、value現在が 2 回存在する場合、出力の書き込み中にvalue1 回だけ書き込み、その を合計しcountますvalue
関数を使用して実行できると思っていdefaultdictましたが、値を合計する方法がわかりません。
助けてください。

4

3 に答える 3

4

要素の順序を気にしない場合は、Karls メソッドを使用できます。

それ以外の場合は、ソートされた辞書を使用します:

import collections
data = [(123, 9), (111, 5), (12, 1), (123, 4), (12, 4),
        (109, 5), (12, 4), (35, 7), (111, 4), (124, 6)]

order = collections.OrderedDict()
for value, count in data:
    order[value] = order.setdefault(value, 0) + count

これは、ディクショナリで見つからないキーのデフォルト値を返す関数を構築時に渡すことができる defaultdict の使用に似ています。

import collections
default = collections.defaultdict(int)
for value, count in data:
    default[value] += count

ただし、その場合、要素の順序も保持されません。

于 2012-05-06T15:58:44.950 に答える
2

を使用しcollections.Counterます。何かのようなもの

counter = collections.Counter()
for a, b in data: counter.update({a: b})
于 2012-05-06T15:40:56.917 に答える
-2

ordereddictいいねを使う

mydict = ordereddict()

try:
    mydict[val] = mydict[val] + additional_val
except KeyError:
    mydict[val] = additional_val
于 2012-05-06T15:54:37.720 に答える