2012-05-15 42 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'是一個內置的蟒蛇。 – 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()