2014-09-05 2 views
0

У меня есть список с кортежами: (timestamp, someOtherValue). Я хотел бы построить новый список с кортежами следующим образом: (timestamp, сумма всех someOtherValue для этой метки времени). Я попытался выяснить какое-то понимание списка, но я застрял. Есть ли разумный способ сделать это, в Python?Как объединить кортежи в списке на основе значений?

+0

Является ли первоначальный список сортируется на метку времени? –

ответ

3
l = [("timestamp1", 1),("timestamp1", 2),("timestamp1", 1),("timestamp2", 2)] 
d = {} 
for ts, val in l: 
    d.setdefault(ts,0) 
    d[ts] += val 
print d.items() 
[('timestamp2', 2), ('timestamp1', 4)] 

Или использовать defaultdict:

from collections import defaultdict 
l = [("timestamp1", 1),("timestamp1", 2),("timestamp1", 1),("timestamp2", 2)] 
d = defaultdict(int) 
for ts, val in l: 
    d[ts] += val 
print (d.items()) 
[('timestamp2', 2), ('timestamp1', 4)] 
+0

@PeterDeGlopper, yep отправил неправильный код. –

+0

Первая форма должна быть 'd [ts] = d.get (ts, 0) + val', я бы подумал. –

Смежные вопросы