如何在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()]