使用python为列表中的相同键求和多个值

时间:2015-08-14 07:40:14

标签: python list

我有一个如下所示的列表:

(151258350, 2464)
(151258350, 56)
(151262958, 56)
(151258350, 56)
(151262958, 112)
(151262958, 112)
(151259627, 56)
(151262958, 112)
(151262958, 56)

我想要一个看起来像这样的结果:

151259627 56
151262958 448
151258350 2576

这是我的代码:

for key, vals in d.items():
    tempList.append((key, reduce(add, vals))) 

这里,d是具有键值对的列表。 tempList是List,在按键对它们求和后将附加值。并添加是一个功能:

def add(x, y): return x+y

如果已经提出这个问题,请指出我,因为我自己找不到这个问题。

5 个答案:

答案 0 :(得分:9)

使用Counter

{{1}}

答案 1 :(得分:3)

num_list = [(151258350, 2464),
(151258350, 56),
(151262958, 56),
(151258350, 56),
(151262958, 112),
(151262958, 112),
(151259627, 56),
(151262958, 112),
(151262958,56)]
num_dict = {}
for t in num_list:
    if t[0] in num_dict:
        num_dict[t[0]] = num_dict[t[0]]+t[1]
    else:
        num_dict[t[0]] = t[1]

for key,value in num_dict.items():
    print "%d %d" %(key,value)

答案 2 :(得分:2)

您可以使用计数器counters

l = [(151258350, 2464),                                                     
   (151258350, 56),
   (151262958, 56),
   (151258350, 56),
   (151262958, 112),
   (151262958, 112),
   (151259627, 56),
   (151262958, 112),
   (151262958, 56)]

count={}
for k,v in l:
     if k in count:
         count[k] += v
     else:
         count[k]=v
print count
  

第2部分

如果你找到了#34; Animesh"回答有趣,你可以用更简单的方式尝试:这不需要任何导入。不使用.get()

git fetch

答案 3 :(得分:1)

最简单的方法是使用defaultdict

result = defaultdict(int)
for key, value in source:
    result[key] += value

# if you really want result as a list of tuples
rslt = list(result.items())

如果您的source实际上是一个字典(不是您在问题中对其进行描述的元组列表),请将for key, value in source:替换为for key, value in source.iteritems():

答案 4 :(得分:1)

这是一个简单的单行程序,无需导入任何库:

super.appConnect