我在%H:%M:%S
中创建了一个使用key创建的字典及其值。
dict = {
'06:00:01': '0x95', '06:10:01': '0x97',
'06:20:01': '0x98', '06:30:01': '0x99',
'06:40:01': '0x101', '06:50:01': '0x102',
'07:00:01': '0x104', '07:10:01': '0x105',
'07:20:01': '0x106', '07:30:01': '0x107',
'07:40:01': '0x109', '07:50:01': '0x110',
'08:00:01': '0x111', '08:10:01': '0x112',
'08:20:01': '0x113', '08:30:01': '0x114',
'08:40:01': '0x115', '08:50:01': '0x116',
'09:00:01': '0x117', '09:10:01': '0x118',
'09:20:01': '0x119', '09:30:01': '0x119',
'09:40:01': '0x120', '09:50:01': '0x121',
'10:00:01': '0x122', '10:10:01': '0x122',
'10:20:01': '0x123', '10:30:01': '0x124',
'10:40:01': '0x124', '10:50:01': '0x125',
'11:00:01': '0x125', '11:10:01': '0x126',
'11:20:01': '0x126', '11:30:01': '0x126',
'11:40:01': '0x127', '11:50:01': '0x127',
'12:00:01': '0x127', '12:10:01': '0x128',
'12:20:01': '0x128'
}
我正在考虑根据当前系统时间返回字典值的逻辑。如果当前系统时间在字典的两个键值范围内,则它应该返回python
中低位键的值答案 0 :(得分:0)
此解决方案假定您没有使用am / pm格式:
from datetime import datetime
cur_time = datetime.now().time()
print cur_time
keys = sorted(date_dict.keys())
times = [datetime.strptime(i, "%H:%M:%S") for i in keys]
out = False
for idx, t in enumerate(times):
if cur_time >= t.time():
t1 = times[min(idx+1, len(times)-1)].time()
if cur_time <= t1:
out = date_dict[str(t.time())]
print out
我将字典对象dict
的默认名称切换为date_dict
- 这正是您问题中的字典。使用默认名称会覆盖它们,因此不应该这样做。
cur_time
是当前时间,为方便起见而打印。 keys
是已排序字典键的列表,然后将其转换为times
个datetime
个对象的列表enumerate
。这可以在一行中完成,但接缝更加可读。
for循环使用datetime
来访问idx
个对象及其索引datetime
。如果当前时间大于或等于t.time()
个对象时间,则代码会检查它是否也小于或等于列表中的下一个对象。如果是这种情况,则当前时间适合该范围,而下键(out
)的较低值分配给times[min(idx+1, len(times)-1)]
。如果它根本不在词典范围内,则该值将保持为默认值&#39; False&#39;。
部分'12:20:01'
可防止索引超出范围,使其大于timedelta
。
您可以使用from datetime import timedelta
cur_time = (datetime.now() + timedelta(hours=8)).time()
轻松测试此程序并生成不同的时间,此处的时间间隔不同:
#try this one:
tuples = list(zip(data_set["data_date"], data_set["data_1"],data_set["data_2"]))
print (tuples)