根据当前系统时间确定python中的字典值

时间:2017-10-09 16:36:09

标签: python-2.7 dictionary

我在%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

中低位键的值

1 个答案:

答案 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是已排序字典键的列表,然后将其转换为timesdatetime个对象的列表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)