'Last Key in Python Dictionary

I am having difficulty figuring out what the syntax would be for the last key in a Python dictionary. I know that for a Python list, one may say this to denote the last:

list[-1]

I also know that one can get a list of the keys of a dictionary as follows:

dict.keys()

However, when I attempt to use the logical following code, it doesn't work:

dict.keys(-1)

It says that keys can't take any arguments and 1 is given. If keys can't take arguments, then how can I denote that I want the last key in the list?

I am operating under the assumption that Python dictionaries are ordered in the order in which items are added to the dictionary with most recent item last. For this reason, I would like to access the last key in the dictionary.

I am now told that the dictionary keys are not in order based on when they were added. How then would I be able to choose the most recently added key?



Solution 1:[1]

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).

Solution 2:[2]

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

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

Solution 3:[3]

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".

Solution 4:[4]

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()))

Solution 5:[5]

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.

Solution 6:[6]

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).

Solution 7:[7]

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!!

Solution 8:[8]

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'

Solution 9:[9]

this will return last element of dictionary:

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

Solution 10:[10]

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)

Solution 11:[11]

#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)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 jaquinocode
Solution 2 ravichandra vydhya
Solution 3 Daniel Roseman
Solution 4
Solution 5
Solution 6
Solution 7 Matheus
Solution 8 Heikki
Solution 9 dejanualex
Solution 10 chro
Solution 11 Suraj Rao