python是否有一种方法可以按分钟比较两个日期时间键并获得这些键的最大值?



大家好现在我有一个节目字典

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]

最新更新