2017-10-09 28 views
1

我有一個使用密鑰在%H:%M:%S中創建的字典及其值。根據當前系統時間確定python中的字典值

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

如果你沒有看到我的編輯 - 你重寫字典對象默認名稱。在我的程序中,我將它重命名爲'date_dict'。 – atru

+0

我沒有意識到這一點。感謝您糾正我!我會很快測試你的答案。 –

+0

我把它放在腦海裏告訴你,直到第二天才完全忘記它。讓我知道它是如何工作的! – atru

回答

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 

我切換字典對象的默認名稱dictdate_dict - 這正是您的問題的字典。使用默認名稱覆蓋它們,所以不應該這樣做。

cur_time是當前時間,爲方便起見而印刷。 keys是一個已排序的字典鍵列表,然後將它們變成的datetime對象。這可以在一條線上完成,但接縫更具可讀性。

for循環使用enumerate來訪問datetime對象及其索引idx。如果當前時間大於或等於對象時間,代碼會檢查它是否也小於或等於列表中的下一個對象。如果是這種情況,則當前時間適合該範圍,並將較低的值(t.time())分配給out。如果完全不在字典範圍內,則該值將保持爲默認的「False」。

times[min(idx+1, len(times)-1)]部分可以防止索引超出範圍大於'12:20:01'的值。

您可以輕鬆地通過使用timedelta併產生不同的時間,不同的在這裏通過小時的測試這個程序:

from datetime import timedelta 

cur_time = (datetime.now() + timedelta(hours=8)).time()