大家好现在我有一个节目字典
shows = {
"mad.men": [
"2021-02-03 15:15:20.419000-05:00",
"1612384580",
0.1116604417347844
],
"breaking.bad": [
"2021-02-03 15:18:43.186000-05:00",
"1612369123",
3.60979356628377e-06
],
"the.shield": [
"2021-02-03 15:16:51.357000-05:00",
"1612373511",
0.030060711756050296
],
"game.of.thrones": [
"2021-02-03 15:14:48.075000-05:00",
"1612384248",
3.9553624669451892,
[
"2021-02-03 15:15:29.043000-05:00",
"1612384349",
3.9553624669451892
]
]
}
这里是按时间戳显示的默认值
defaults = {
"mad.men": [
{
"2021-02-03 15:14:00-05:00": 0
},
{
"2021-02-03 15:15:00-05:00": 0
},
{
"2021-02-03 15:16:00-05:00": 0
},
{
"2021-02-03 15:17:00-05:00": 0
},
{
"2021-02-03 15:18:00-05:00": 0
},
{
"2021-02-03 15:19:00-05:00": 0
],
"breaking.bad": [
{
"2021-02-03 15:14:00-05:00": 0
},
{
"2021-02-03 15:15:00-05:00": 0
},
{
"2021-02-03 15:16:00-05:00": 0
},
{
"2021-02-03 15:17:00-05:00": 0
},
{
"2021-02-03 15:18:00-05:00": 0
},
{
"2021-02-03 15:19:00-05:00": 0
],
"the.shield": [
{
"2021-02-03 15:14:00-05:00": 0
},
{
"2021-02-03 15:15:00-05:00": 0
},
{
"2021-02-03 15:16:00-05:00": 0
},
{
"2021-02-03 15:17:00-05:00": 0
},
{
"2021-02-03 15:18:00-05:00": 0
},
{
"2021-02-03 15:19:00-05:00": 0
},
],
"game.of.thrones": [
{
"2021-02-03 15:14:00-05:00": 0
},
{
"2021-02-03 15:15:00-05:00": 0
},
{
"2021-02-03 15:16:00-05:00": 0
},
{
"2021-02-03 15:17:00-05:00": 0
},
{
"2021-02-03 15:18:00-05:00": 0
},
{
"2021-02-03 15:19:00-05:00": 0
},
]
}
我想要实现的是通过show键,值对迭代到默认键,值对。如果时间戳与显示字典和默认字典的分钟匹配,则将默认字典值替换为显示值。例如,显示game.of.thrones
为15:15:20.419000与默认值15:15:00在同一分钟内,则将默认值0替换为显示值3.95。
so the end result I would like is :
defaults = {
"mad.men": [
{
"2021-02-03 15:14:00-05:00": 0
},
{
"2021-02-03 15:15:20.419000-05:00": 0.1116604417347844
},
{
"2021-02-03 15:16:00-05:00": 0
},
{
"2021-02-03 15:17:00-05:00": 0
},
{
"2021-02-03 15:18:00-05:00": 0
},
{
"2021-02-03 15:19:00-05:00": 0
],
"breaking.bad": [
{
"2021-02-03 15:14:00-05:00": 0
},
{
"2021-02-03 15:15:00-05:00": 0
},
{
"2021-02-03 15:16:00-05:00": 0
},
{
"2021-02-03 15:17:00-05:00": 0
},
{
"2021-02-03 15:18:43.186000-05:00": 3.60979356628377e-06
},
{
"2021-02-03 15:19:00-05:00": 0
],
"the.shield": [
{
"2021-02-03 15:14:00-05:00": 0
},
{
"2021-02-03 15:15:00-05:00": 0
},
{
"2021-02-03 15:16:51.357000-05:00": 0.030060711756050296
},
{
"2021-02-03 15:17:00-05:00": 0
},
{
"2021-02-03 15:18:00-05:00": 0
},
{
"2021-02-03 15:19:00-05:00": 0
},
],
"game.of.thrones": [
{
"2021-02-03 15:14:48.075000-05:00": 3.9553624669451892
},
{
"2021-02-03 15:15:29.043000-05:00": 3.9553624669451892
},
{
"2021-02-03 15:16:00-05:00": 0
},
{
"2021-02-03 15:17:00-05:00": 0
},
{
"2021-02-03 15:18:00-05:00": 0
},
{
"2021-02-03 15:19:00-05:00": 0
},
]
}
我如何在这里实现这个逻辑?
可以用datetime.replace()
函数代替shows
下的秒和微秒。
示例:假设您已将show的datetime
对象存储为showtime
,并将默认时间存储为defaulttime
。然后:
showtime.replace(second=0, microsecond=0) == defaulttime
如果能把字典defaults[show_name]
从list改成dict,就方便多了。例如,
defaults = {
"mad.men": {
"2021-02-03 15:14:00-05:00": 0,
"2021-02-03 15:15:00-05:00": 0,
"2021-02-03 15:16:00-05:00": 0
}
}
这样可以在O(n)
时间而不是O(n^2)
时间进行比较。
for key, value in shows.items():
altered_show_time = value[0].replace(second=0, microsecond=0)
if altered_show_time in defaults[key]:
defaults[key][altered_show_time] = value[2]