使用python对列表中同一个键的多个值求和

2024-05-15 02:40:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列表如下:

(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是按键对值求和后附加值的列表。add是一个函数:

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

如果这个问题已经被问过了,请告诉我,因为我自己找不到。


Tags: key代码inaddreduce列表foritems
3条回答

使用Counter

>>> l = [(151258350, 2464),
(151258350, 56),
(151262958, 56),
(151258350, 56),
(151262958, 112),
(151262958, 112),
(151259627, 56),
(151262958, 112),
(151262958, 56)]
>>> c = Counter()
>>> for k, v in l:
        c[k] += v

>>> c
Counter({151258350: 2576, 151262958: 448, 151259627: 56})
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)

最简单的方法是使用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实际上是一个dict(不是您在问题中描述的元组列表),请用for key, value in source.iteritems():替换for key, value in source:

相关问题 更多 >

    热门问题