附加到Python中的列表列表,包含条件

时间:2012-05-15 03:38:18

标签: python list iteration

我正在迭代这些对象并创建列表列表。

这样的事情:

#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)已经包含在值中,我不想附加数据,我想将data[1]添加到现有对象的data[1]

所以从上面的列表中,我真正想要的是:

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

我可以在没有列表的情况下进行操作,但最后,我需要将其转换为列表以供最终使用。

3 个答案:

答案 0 :(得分:6)

如果我是你,我会使用字典。

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

答案 1 :(得分: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

答案 2 :(得分:1)

这是一个很好的单行(禁止进口)应该做你需要的:

from collections import Counter
values = sum([Counter({o.day: o.seconds}) for o in objects], Counter()).items()