Python Dictionary 中的最后一个键

我很难找出 Python 字典中最后一个键的语法。我知道,对于 Python 列表,可以这样表示最后一个列表:

list[-1]

我还知道,人们可以得到一个词典的关键词列表如下:

dict.keys()

但是,当我尝试使用下面的逻辑代码时,它不起作用:

dict.keys(-1)

它说键不能接受任何参数,并且给出了1。如果键不能接受参数,那么如何表示我想要列表中的最后一个键?

我的操作基于这样一个假设: Python 字典是按照项目添加到字典的顺序排序的,最新的项目最后。因此,我想访问字典中的最后一个键。

我现在被告知,字典键没有顺序的基础上,当他们被添加。那么我如何能够选择最近添加的关键?

230844 次浏览

It seems like you want to do that:

dict.keys()[-1]

dict.keys() returns a list of your dictionary's keys. Once you got the list, the -1 index allows you getting the last element of a list.

Since a dictionary is unordered*, it's doesn't make sense to get the last key of your dictionary.

Perhaps you want to sort them before. It would look like that:

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

Note:

In Python 3, the code is

list(dict)[-1]

*Update:

This is no longer the case. Dictionary keys are officially ordered as of Python 3.7 (and unofficially in 3.6).

It doesn't make sense to ask for the "last" key in a dictionary, because dictionary keys are unordered. You can get the list of keys and get the last one if you like, but that's not in any sense the "last key in a dictionary".

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

Otherwise, the keys is just an unordered list, and the "last one" is meaningless, and even can be different on various python versions.

Maybe you want to look into OrderedDict.

If insertion order matters, take a look at 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')

Update:

An OrderedDict is no longer necessary as dictionary keys are officially ordered in insertion order as of Python 3.7 (unofficially in 3.6).

For these recent Python versions, you can instead just use list(my_dict)[-1] or list(my_dict.keys())[-1].

There are absolutely very good reason to want the last key of an OrderedDict. I use an ordered dict to list my users when I edit them. I am using AJAX calls to update user permissions and to add new users. Since the AJAX fires when a permission is checked, I want my new user to stay in the same position in the displayed list (last) for convenience until I reload the page. Each time the script runs, it re-orders the user dictionary.

That's all good, why need the last entry? So that when I'm writing unit tests for my software, I would like to confirm that the user remains in the last position until the page is reloaded.

dict.keys()[-1]

Performs this function perfectly (Python 2.7).

yes there is : len(data)-1.

For the first element it´s : 0

You can do a function like this:

def getLastItem(dictionary):
last_keyval = dictionary.popitem()
dictionary.update({last_keyval[0]:last_keyval[1]})
return {last_keyval[0]:last_keyval[1]}

This not change the original dictionary! This happen because the popitem() function returns a tuple and we can utilize this for us favor!!

There's a definite need to get the last element of a dictionary, for example to confirm whether the latest element has been appended to the dictionary object or not.

We need to convert the dictionary keys to a list object, and use an index of -1 to print out the last element.

mydict = {'John':'apple','Mat':'orange','Jane':'guava','Kim':'apple','Kate': 'grapes'}


mydict.keys()

output: dict_keys(['John', 'Mat', 'Jane', 'Kim', 'Kate'])

list(mydict.keys())

output: ['John', 'Mat', 'Jane', 'Kim', 'Kate']

list(mydict.keys())[-1]

output: 'Kate'

In python 3.6 I got the value of last key from the following code

list(dict.keys())[-1]

Since python 3.7 dict always ordered(insert order),

since python 3.8 keys(), values() and items() of dict returns: view that can be reversed:

to get last key:

next(reversed(my_dict.keys()))

the same apply for values() and items()

PS, to get first key use: next(iter(my_dict.keys()))

#to find last key:


dict = {'a':1,'b':2,'c':3,'d':4}
print(dict)


res = list(dict.key())[-1]
print(res)


#to find last value:


dict = {'a':1,'b':2,'c':3,'d':4}
print(dict)


res = list(dict.values())[-1]
print(res)

this will return last element of dictionary:

dictObj[len(dictObj.keys()) - 1]

To find the last key of dictionary, use for loops with key , pass the loop and print the key,

#print last key
d1={"one":"first","two":"second","three":"third"}
for key in d1.keys():pass
print(key)