如何在python中求和基于日期的字典值?
我有下面的字典格式,我想根据日期对字典值求和如何在python中求和基于日期的字典值?,python,Python,我有下面的字典格式,我想根据日期对字典值求和 dict1 = [ {'date':"10-05-2017", 'cost':20}, {'date':"10-05-2017", 'cost':10}, {'date':"11-05-2017", 'cost':15}, {'date':"11-05-2017", 'cost':10}, {'date':"12-05-2017",
dict1 = [
{'date':"10-05-2017", 'cost':20},
{'date':"10-05-2017", 'cost':10},
{'date':"11-05-2017", 'cost':15},
{'date':"11-05-2017", 'cost':10},
{'date':"12-05-2017", 'cost':5}
]
结果:
[
{'date':"10-05-2017", 'cost':30},
{'date':"11-05-2017", 'cost':25},
{'date':"12-05-2017", 'cost':5}
]
您可以使用以下工具轻松完成此操作: 请注意,只有日期相同的词典彼此相邻时,这才有效,即如果不确定,最好先按相同的
键对列表进行排序。尝试以下操作:
result = {}
for i in dict1:
result[i['date']] = result.setdefault(i["date"], 0) + i["cost"]
您可以尝试以下方法:
import itertools
dict1 = [
{'date':"10-05-2017", 'cost':20},
{'date':"10-05-2017", 'cost':10},
{'date':"11-05-2017", 'cost':15},
{'date':"11-05-2017", 'cost':10},
{'date':"12-05-2017", 'cost':5}
]
new_data = [(a, list(b)) for a, b in itertools.groupby([i.items() for i in dict1], key=lambda x:list(x)[0][1])]
final_dict = [{"date":a, "cost":sum(list(i)[-1][-1] for i in b if "cost" in list(i)[-1])} for a, b in new_data]
输出:
[{'date': '10-05-2017', 'cost': 30}, {'date': '11-05-2017', 'cost': 25}, {'date': '12-05-2017', 'cost': 5}]
您可以使用按日期对记录进行分组
此函数需要一个键:另一个用于提取日期的函数。你可以用它
以下是使用此功能和理解列表的简短解决方案:
import itertools
import operator
dict1 = [{'cost': 20, 'date': '10-05-2017'},
{'cost': 10, 'date': '10-05-2017'},
{'cost': 15, 'date': '11-05-2017'},
{'cost': 10, 'date': '11-05-2017'},
{'cost': 5, 'date': '12-05-2017'}]
get_date = operator.itemgetter('date')
get_cost = operator.itemgetter('cost')
result = [{'date': date, 'cost': sum(map(get_cost, group))}
for date, group in itertools.groupby(dict1, key=get_date)]
注意:dict1(字典列表)应按日期排序:
dict1.sort(key=get_date)
首先,dict1
不是字典,它是字典列表。仅使用standar库尝试以下脚本
from collections import Counter
dict1 = [
{'date':"10-05-2017", 'cost':20},
{'date':"10-05-2017", 'cost':10},
{'date':"11-05-2017", 'cost':15},
{'date':"11-05-2017", 'cost':10},
{'date':"12-05-2017", 'cost':5}
]
counter = Counter()
for each in dict1:
counter.update({each['date']: each['cost']})
[{'date': key, 'cost': value} for key, value in counter.items()]
好极了请您展示您的代码,并指出您在自己的实现中面临的困难。字符串值表示日期这一事实在此处并不相关。如果您对itI感到满意,pandas在此处可能很有用。我将在此处获取账单金额列表。我想根据日期来计算账单金额。dict-to-list转换是什么意思?这不仅非常不直观,而且还依赖于dict中键的迭代顺序,这取决于dict的类型,甚至可能取决于Python实现!
from collections import Counter
dict1 = [
{'date':"10-05-2017", 'cost':20},
{'date':"10-05-2017", 'cost':10},
{'date':"11-05-2017", 'cost':15},
{'date':"11-05-2017", 'cost':10},
{'date':"12-05-2017", 'cost':5}
]
counter = Counter()
for each in dict1:
counter.update({each['date']: each['cost']})
[{'date': key, 'cost': value} for key, value in counter.items()]