我刚刚在这里问了一个非常相似的问题,两个答案都有效。但是,当我在每个字典中有 > 2 个字典键时,第 3 个键的值始终为 0。例如:
myList = [{'date':'2008-04-23','value':'1','value2':'2'}, {'date':'2008-04-01','value':'8','value2':'5'}, {'date':'2008-04-05','value':'3','value2':'4'}, {'date':'2009-04-19','value':'5','value2':'1'}, {'date':'2009-04-21','value':'8','value2':'1'},{'date':'2010-09-09','value':'3','value2':'1'},
{'date':'2010-09-10','value':'4','value2':'9'},
]
mgilson答案的修改版本:
import itertools
from itertools import groupby
myList.sort(key=lambda x:x['date'][:7])
for k,v in groupby(myList,key=lambda x:x['date'][:7]):
print k, list(v)
for k,v in groupby(myList,key=lambda x:x['date'][:7]):
print {'date':k+'-01','value':sum(int(d['value']) for d in v),'value2':sum(int(d['value2']) for d in v)}
结果:
{'date': '2008-04-01', 'value2': 0, 'value': 12}
{'date': '2009-04-01', 'value2': 0, 'value': 13}
{'date': '2010-09-01', 'value2': 0, 'value': 7}
帕维尔答案的修改版本:
import itertools
key = lambda datum: datum['date'].rsplit('-', 1)[0]
myList.sort(key=key)
result = [{
'date': key + '-01',
'value': sum(int(item['value']) for item in group),
'value2': sum(int(item['value2']) for item in group)
} for key, group in itertools.groupby(myList, key=key)]
print result
结果:
[{'date': '2008-04-01', 'value2': 0, 'value': 12}, {'date': '2009-04-01', 'value2': 0, 'value': 13}, {'date': '2010-09-01', 'value2': 0, 'value': 7}]
我在哪里错了?