2016-08-30 27 views
1

我試圖從返回JSON對象的API提取財務數據。 API沒有明確說明返回的字典是OrderedDicts,但是輸出總是被排序的,因此我會做出這樣的假設。檢索字典中最後一個鍵的值

我需要檢索字典中最後一個鍵的值,因爲我需要最新的財務數據。但是,我不能明確地使用密鑰的名稱來提取它,因爲它是以日期格式顯示的,並且可能會因使用查詢的公司而有所不同。

我試圖將字典對象轉換成列表,並使用索引-1選擇最後一個鍵,但轉換過程似乎隨機化字典的順序不再檢索最後一個日期。

那麼我該如何去檢索字典中最後一個鍵的值?

這裏是什麼樣的JSON對象看起來像一個例子:

{'2007-06-01T00:00:00': 21.19, 
'2008-06-01T00:00:00': 26.01, 
    '2009-06-01T00:00:00': 19.34, 
    '2010-06-01T00:00:00': 22.88, 
    '2011-06-01T00:00:00': 23.77, 
    '2012-06-01T00:00:00': 14.77, 
    '2013-06-01T00:00:00': 16.58, 
    '2014-06-01T00:00:00': 14.02, 
    '2015-06-01T00:00:00': 7.0, 
    '2016-06-01T00:00:00': 9.08} 
+4

通常,如果API沒有指定它實際上做了什麼,則不應該依賴它繼續這樣做。 –

+2

如果密鑰全部可比,那麼最高會是最近的,所以你可以用'max(data.keys())'來獲得最近的密鑰,這取決於你需要指定一個key =的格式。將日期轉換爲可以正確比較的格式。 –

+0

您可以將日期字符串轉換爲實際的日期時間對象,對它們進行排序並獲得最大的日期時間對象。 –

回答

4

重新考慮我意識到,因爲日期的格式,它們是作爲字符串正確可比性問題後,你可以做k,v = max(data.items())但是,如果您(或其他人在查看此主題)使用的日期格式不起作用,那麼我的原始答案如下。


,你可以簡單地使用max內置比較字典的鍵,以確保它們都比較,日期和時間,你可以使用key參數比較它們作爲datetime對象:

import datetime 

data = {'2007-06-01T00:00:00': 21.19, 
'2008-06-01T00:00:00': 26.01, 
    '2009-06-01T00:00:00': 19.34, 
    '2010-06-01T00:00:00': 22.88, 
    '2011-06-01T00:00:00': 23.77, 
    '2012-06-01T00:00:00': 14.77, 
    '2013-06-01T00:00:00': 16.58, 
    '2014-06-01T00:00:00': 14.02, 
    '2015-06-01T00:00:00': 7.0, 
    '2016-06-01T00:00:00': 9.08} 

def converter(timestamp): 
    return datetime.datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S") 

highest = max(data.keys(),key=converter) 

print(highest) #2016-06-01T00:00:00 
+0

實際上'max(data.items(),key = ...)'更像它,因爲OP想要檢索與密鑰相關的值。確保'converter'需要一個元組而不是時間戳。 – ozgur

+0

編寫轉換器函數似乎比較簡單,只處理關鍵字,然後獲得'value = data [highest]',但絕對可以讓它處理它。 –

+0

有道理。順便說一句,你不需要'.keys()'。 – ozgur