我不知道什麼樣的數據格式/結構您 意味着你的源數據是,因爲你提出的是不是一個確切的Python表示。但是讓我們假設你的行是字符串 列表(或 可以很容易地轉換成他們):
rows = [
[ '1/6/12 16:28', '1/6/12 16:55', 'e' ],
[ '1/11/12 13:18', '1/11/12 13:58', 'm' ],
[ '1/13/12 13:20', '1/13/12 13:24', 'm' ]
]
然後,這裏是通過類來計算平均值的方式:
from collections import Counter
from datetime import datetime
def parse(s, format="%x %H:%M"):
"""
Return parsed datetime in the given format.
"""
return datetime.strptime(s, format)
total_items = Counter()
total_duration = Counter()
for start, end, kind in rows:
duration = parse(end) - parse(start)
total_items[kind] += 1
total_duration[kind] += duration.total_seconds()
means = { k: total_duration[k]/total_items[k] for k in total_items }
print means
它使用collections.Counter
s來跟蹤日誌中每個類的計數和持續時間。持續時間必須先計算出來,首先將日期/時間字符串表示解析爲內部格式,如datetime.datetime
。一旦計數器積累,字典解析計算每樣平均值(你叫什麼 「下課」,但這是一個技術性的Python結構,所以我把它稱爲一種)。
所得means
存儲所計算的值。 means['m']
給出了平均所有'm'
條目,等等。
儘管parse
函數可用於您在問題中顯示的少數數據樣本,但日期/時間解析相當挑剔。相反,這裏使用strptime
方法,我建議使用一個更廣泛和包容性的解析器,如該dateutil模塊中找到。如果你想使用,刪除或重命名這裏找到parse
功能,並替代:
from dateutil.parser import parse
,提供了一個簡易替換了更廣泛的接受的格式。