在python词典列表中查找相同日期的单击总数
我想找到每个日期的总点击量。我尝试了很多方法,但都没有找到合适的方法。下面我将写下字典的目标列表在python词典列表中查找相同日期的单击总数,python,python-3.x,string,list,dictionary,Python,Python 3.x,String,List,Dictionary,我想找到每个日期的总点击量。我尝试了很多方法,但都没有找到合适的方法。下面我将写下字典的目标列表 data = [{"click":"3","time":"2020-08-21T00:00:00.000Z"}, {"click":"6","time":"2020-08-22T10:00:00.000Z"}, {"
data = [{"click":"3","time":"2020-08-21T00:00:00.000Z"},
{"click":"6","time":"2020-08-22T10:00:00.000Z"},
{"click":"7","time":"2020-08-22T11:00:00.000Z"},
{"click":"8","time":"2020-08-22T12:00:00.000Z"},
{"click":"29","time":"2020-08-24T00:00:00.000Z"},
{"click":"13","time":"2020-08-25T00:00:00.000Z"}]
在此数据列表中,对于2020-08-22日期,有3个dict具有不同的点击值。所以我想要2020-08-22日期21的总点击量
请帮我得到这样的结果
data = [{"click":"3","time":"2020-08-21T00:00:00.000Z"},
{"click":"21","time":"2020-08-22T00:00:00.000Z"},
{"click":"29","time":"2020-08-24T00:00:00.000Z"},
{"click":"13","time":"2020-08-25T00:00:00.000Z"}]
感谢您的考虑和即将到来的回复。这里有一个解决方案,使用将日期拆分为T
&使用日期组件对值进行分组和求和
from itertools import groupby
print([
{"time": k + "T00:00:00.000Z", "click": sum(int(vv['click']) for vv in v)}
for k, v in groupby(data, key=lambda x: x['time'].split("T")[0])
])
简单地说就是python:) 输出 [{'click':'3','time':'2020-08-21T00:00:00.000Z'},
{'click':'21','time':'2020-08-22T00:00:00.000Z'},
{'click':'29','time':'2020-08-24T00:00:00.000Z'},
{'click':'13','time':'2020-08-25T00:00:00.000Z'}] 简单解决方案:
total_click_dict = dict()
for d in data:
# Find first occurrence of 'T' - it separates the date from the rest of the timestamp
# i.e. 2020-08-22 <- T -> 11:00:00.000Z
first_index_of_date_seperator = d['time'].find('T')
# Fetching date
date = d['time'][0:first_index_of_date_seperator]
# If date not in dictionary
if not date in total_click_dict:
# Create a counter for date
total_click_dict[date] = 0
# Increase current date counter by amounts of clicks
total_click_dict[date] += int(d['click'])
# {'2020-08-21': 3, '2020-08-22': 21, '2020-08-24': 29, '2020-08-25': 13}
print(total_click_dict)
total\u click\u dict=dict()
对于数据中的d:
#查找第一个出现的“T”-它将日期与时间戳的其余部分分开
#即2020-08-22 11:00:00.000Z
日期分隔符的第一个索引=d['time']。查找('T')
#取数日期
日期=d['time'][0:日期分隔符的第一个索引]
#如果日期不在字典中
如果不是总日期,请单击记录:
#为日期创建计数器
总点击次数[日期]=0
#增加当前日期计数器的点击量
总点击次数(日期)+=int(点击次数)
# {'2020-08-21': 3, '2020-08-22': 21, '2020-08-24': 29, '2020-08-25': 13}
打印(总点击次数)
如下
from collections import defaultdict
data = [{"click": "3", "time": "2020-08-21T00:00:00.000Z"},
{"click": "6", "time": "2020-08-22T10:00:00.000Z"},
{"click": "7", "time": "2020-08-22T11:00:00.000Z"},
{"click": "8", "time": "2020-08-22T12:00:00.000Z"},
{"click": "29", "time": "2020-08-24T00:00:00.000Z"},
{"click": "13", "time": "2020-08-25T00:00:00.000Z"}]
collected_clicks = defaultdict(int)
collected_clicks_lst = []
for entry in data:
clicks = int(entry['click'])
date = entry['time'][:10]
collected_clicks[date] += clicks
for date,clicks in collected_clicks.items():
collected_clicks_lst.append({'click': clicks, 'time': date + 'T00:00:00.000Z'})
print(collected_clicks_lst)
输出
[{'click': 3, 'time': '2020-08-21T00:00:00.000Z'}, {'click': 21, 'time': '2020-08-22T00:00:00.000Z'}, {'click': 29, 'time': '2020-08-24T00:00:00.000Z'}, {'click': 13, 'time': '2020-08-25T00:00:00.000Z'}]
返回所需格式的简单解决方案
new_map = {}
result = []
for entry in data:
time = entry.get('time').split('T')[0]
click = int(entry.get('click'))
if time+"T00:00:00.000Z" not in new_map:
new_map[time+"T00:00:00.000Z"] = click
else:
new_map[time+"T00:00:00.000Z"] += click
for entry in new_map:
result.append({"click":str(new_map.get(entry)), "time":entry})
额外的
导入
是为了避免重新发明轮子(重新编写冗余代码)
[{'click': 3, 'time': '2020-08-21T00:00:00.000Z'}, {'click': 21, 'time': '2020-08-22T00:00:00.000Z'}, {'click': 29, 'time': '2020-08-24T00:00:00.000Z'}, {'click': 13, 'time': '2020-08-25T00:00:00.000Z'}]
new_map = {}
result = []
for entry in data:
time = entry.get('time').split('T')[0]
click = int(entry.get('click'))
if time+"T00:00:00.000Z" not in new_map:
new_map[time+"T00:00:00.000Z"] = click
else:
new_map[time+"T00:00:00.000Z"] += click
for entry in new_map:
result.append({"click":str(new_map.get(entry)), "time":entry})