2012-05-15 4 views
2

Я выполняю итерацию по таким объектам и создаю список списков.Добавление в список списков в Python с условиями

Что-то вроде этого:

#data.py 
values = [] 
for o in objects: 
    data = [o.day, o.seconds] 
    values.append(data) 

Так что дает мне, например:

[['27/2', 34], ['23/2', 21], ['25/2', 11], ['27/2', 38]] 

Но мне нужно, чтобы сделать дополнительную работу. Если data[0] (day) уже находится в значениях, я не хочу добавлять данные, я хочу добавить в существующий объект .

Так из приведенного выше списка, что я действительно хочу это:

[['27/2', 72], ['23/2', 21], ['25/2', 11]] 

Я могу сделать операцию без списка, но, в конце концов, мне нужно, чтобы преобразовать его в список для конечного использования.

+1

Вы также должны обеспечить ваш пример ввода и использовать другое имя переменной, потому что 'object' является встроенный в Python. – jamylak

ответ

2

Вот как использовать defaultdict

from collections import defaultdict 
values = defaultdict(int) 
for o in my_object: 
    values[o.day] += o.seconds 

Вот способ, используя Counter

from itertools import Counter 
values = Counter() 
for o in my_object: 
    values += Counter({o.day: o.seconds}) 

Вы можете получить список из значений, как это

values.items() # or list(values.items()) in Python3 
+0

Много хороших ответов, но я пошел с первым здесь, используя defaultdict. Благодарю. – pwalsh

6

Я бы использовал словарь, если бы был вами.

values = {} 
for item in object_: # changed object to object_ 
    values[item.day] = values.get(item.day, 0) + item.seconds 
+0

Изменено 'data' на' values', что я думаю, что вы имели в виду. Дайте мне знать, если это не так. :-) – Thanatos

+0

Вы абсолютно правы, p –

1

Вот хороший один вкладыш (за исключением импорта), который должен делать то, что вам нужно:

from collections import Counter 
values = sum([Counter({o.day: o.seconds}) for o in objects], Counter()).items() 
Смежные вопросы