python - 使用python,通过从列表中提取键:值来创建字典
问题描述
我需要从 list1 制作两个字典:
list1 = [['8/16/2016 9:55', 6], ['11/22/2015 13:43', 29], ['5/2/2016 10:14', 1],
['8/2/2016 14:20', 3], ['10/15/2015 16:38', 17], ['9/26/2015 23:23', 1],
['4/22/2016 12:24', 4], ['11/16/2015 9:22', 1], ['2/24/2016 17:57', 1],
['6/4/2016 17:17', 2]]
count_by_hour = {} # this is created by extracting the hour from index[0] of list1
在对我之前发布的问题的回复的帮助下,我能够得到这个。
for each in list1:
if each[0].split(':')[0][-2] == " ": #split by : to get second last char and check if >9
hours.append(each[0].split(':')[0][-1:]) # if hour is <9 take last char which is hour
else:
hours.append(each[0].split(':')[0][-2:]) #else take last 2 chars
print('Hour extracted:')
print(hours)
输出:
Counts by hour:
{'9': 2, '13': 1, '10': 1, '14': 1, '16': 1, '23': 1, '12': 1, '17': 2}
现在,我该如何执行以下操作:
comments_by_hour = {}
Expected Outcome:
{9:7, 13:29, 10:1, 14:3, 16:17, 23:1, 12:4, 17:2} #value is a total for every hour that exists as a key in list1
一如既往,任何帮助表示赞赏。
解决方案
请注意,我们需要为许多类别(小时)中的每一个单独累积总和。一个简单的解决方案(在纯 Python 中)结合了累加器模式,同时使用字典来存储所有计数。
首先,让我们使用time.strptime
列表推导来提取小时数。
In [1]: list1 = [['8/16/2016 9:55', 6], ['11/22/2015 13:43', 29], ['5/2/2016 10:14', 1],
: ['8/2/2016 14:20', 3], ['10/15/2015 16:38', 17], ['9/26/2015 23:23', 1],
: ['4/22/2016 12:24', 4], ['11/16/2015 9:22', 1], ['2/24/2016 17:57', 1],
: ['6/4/2016 17:17', 2]]
In [2]: from time import strptime
In [3]: hour_list = [(strptime(time, "%m/%d/%Y %H:%M").tm_hour, val) for time, val in list1]
解决方案是使用字典来累积每个类别的统计信息。通过(a)从一个空字典开始并(b)更新每个新值的总和来做到这一点。这可以如下完成。
In [4]: comments_by_hour = {}
In [5]: for hour, val in hour_list:
: comments_by_hour[hour] = val + comments_by_hour.get(hour, 0)
:
In [6]: comments_by_hour
Out[6]: {9: 7, 13: 29, 10: 1, 14: 3, 16: 17, 23: 1, 12: 4, 17: 3}
请注意comments_by_hour.get(hour, 0)
,如果存在,则用于获取该小时的当前值,否则使用默认值 0。
推荐阅读
- terraform - 覆盖变量的一部分
- javascript - 无法停止反应中输入标签中小数点后的尾随零
- angular - ngrx/store 给我找不到模块“./shopping-list/store/shopping-list.reducer”错误
- python - Keras ConvLSTM 优化结果和内存管理
- vuejs2 - 如何将动态id 绑定到 JavaScript 事件?
- ios - Stripe iOS didCreatePaymentResult 永远不会被调用
- c# - Visual Studio:移植到 .NET Core 3 后缺少“视图设计器”
- python - 尝试在遗传算法中创建随机性时出错
- git - 删除重复提交
- regex - 注释以模式开头和结尾的行