2013-04-20 114 views
24

我很難搞清Python字典中最後一個鍵的語法是什麼。我知道,對於一個Python列表,可以說這表示最後:Python字典中的最後一個鍵

list[-1] 

我也知道,一個能買到字典的鍵列表如下:

dict.keys() 

然而,當我嘗試使用邏輯下面的代碼,它不工作:

dict.keys(-1) 

它說,鑰匙不能帶任何參數和1中給出。如果鍵不能帶參數,那麼我怎麼能表示我想要列表中的最後一個鍵?

XXXXX 我正在假設Python字典按照項目最後添加到字典的順序進行排序。出於這個原因,我想訪問字典中的最後一個鍵.XXXXX

我現在被告知字典鍵的順序不是基於何時添加的。那麼我怎麼能夠選擇最近添加的密鑰呢?

+3

有在字典之外還有一個「第一」鍵任何更多的「最後」鍵,沒有這樣的事。 – kindall 2013-04-20 21:16:46

+0

你爲什麼想要最後一把鑰匙? Python字典沒有排序。 – 2013-04-20 21:16:48

+0

'list(-1)'不是你如何得到列表中的最後一個元素......這會給你一個錯誤(你正試圖調用一個列表)。我認爲你的意思是'list [-1]'。 – 2013-04-20 21:19:33

回答

24

如果插入順序的問題,看看collections.OrderedDict

An OrderedDict is a dict that remembers the order that keys were first inserted. If a new entry overwrites an existing entry, the original insertion position is left unchanged. Deleting an entry and reinserting it will move it to the end.


In [1]: from collections import OrderedDict 

In [2]: od = OrderedDict(zip('bar','foo')) 

In [3]: od 
Out[3]: OrderedDict([('b', 'f'), ('a', 'o'), ('r', 'o')]) 

In [4]: od.keys()[-1] 
Out[4]: 'r' 

In [5]: od.popitem() # also removes the last item 
Out[5]: ('r', 'o') 
+1

我在執行'od.keys()[ - 1]'時得到'TypeError:'odict_keys'對象不支持索引'。使用Python 3.6.1。用於'python 3'的 – 2017-11-14 22:56:33

+1

使用'list(od.keys())[ - 1]' – 2018-01-10 11:23:11

19

好像你想要做的:

dict.keys()[-1] 

dict.keys()返回你的字典的鍵列表。一旦得到了列表,-1索引就可以讓你獲得列表的最後一個元素。

由於字典無序,因此獲取字典的最後一個鍵是沒有意義的。

也許你想對它們進行排序。它看起來像:

sorted(dict.keys())[-1] 
+2

只需對dict.keys()[ - 1]發表評論這適用於Python 2.7 *,但不適用於Python 3. Python 3將會出錯:TypeError:'dict_keys'對象不支持索引 – continuousqa 2014-08-09 20:18:40

+0

在Python3中,它適用於:'list(dict.keys())[ - 1]' – abe 2017-09-12 20:06:51

16

它沒有意義,要求在字典中的「最後」鍵,因爲字典鍵無序。如果你喜歡,你可以得到密鑰列表並獲得最後一個密鑰,但這在任何意義上都不是「字典中的最後一個密鑰」。

+0

那麼字典會自動按照編輯的順序進行,所以爲了訪問最近的鍵,我需要訪問最後一個鍵或最近添加。 – cbbcbail 2013-04-20 21:18:30

+7

@cbbcbail - 不,不,不... – root 2013-04-20 21:19:21

+11

不,絕對不是!字典是**不會**是你編輯它的順序。它是一個*任意*順序,具體取決於密鑰的哈希值。 – 2013-04-20 21:19:51

4
sorted(dict.keys())[-1] 

否則keys只是無序列表和最後一個沒有意義,可以在不同的Python版本不同。

+0

只是可惜他不支持「字符串」 – 2017-09-25 11:58:03

2

有絕對很好的理由要一個OrderedDict的最後關鍵。當我編輯他們時,我使用一個有序的詞典來列出我的用戶。我正在使用AJAX調用來更新用戶權限並添加新用戶。由於AJAX在檢查權限時觸發,爲了方便起見,我希望我的新用戶保留在顯示列表中的最後一個位置,直到我重新加載頁面。每次腳本運行時,都會重新命令用戶字典。

這一切都很好,爲什麼需要最後一個條目?因此,當我爲我的軟件編寫單元測試時,我想確認用戶保持最後位置,直到頁面重新加載。

dict.keys()[-1] 

完美執行此功能(Python 2.7)。

0

是的:len(data)-1

對於第一個元素it's:0

相關問題