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出现两次,那么在写入输出期间,我们只写一次value并总结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 回答