86

我很难弄清楚 Python 字典中最后一个键的语法是什么。我知道对于 Python 列表,人们可能会这样说来表示最后一个:

list[-1]

我也知道可以得到一个字典的键列表,如下所示:

dict.keys()

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

dict.keys(-1)

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

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

我现在被告知,字典键的顺序不是基于它们添加的时间。那么我如何能够选择最近添加的密钥?

4

12 回答 12

87

看起来你想这样做:

dict.keys()[-1]

dict.keys()返回字典键的列表。获得列表后,-1 索引允许您获取列表的最后一个元素。

由于字典是无序的*,因此获取字典的最后一个键是没有意义的。

也许您想先对它们进行排序。它看起来像这样:

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

笔记:

在 Python 3 中,代码是

list(dict)[-1]

*更新:

这已不再是这种情况。字典键从 Python 3.7 开始正式订购(在 3.6 中非正式订购)。

于 2013-04-20T21:11:14.417 回答
61

如果插入顺序很重要,请查看collections.OrderedDict

OrderedDict 是一个 dict,它记住第一次插入键的顺序。如果新条目覆盖现有条目,则原始插入位置保持不变。删除条目并重新插入会将其移至末尾。


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

更新:

OrderedDict 不再需要,因为字典键从 Python 3.7 开始按插入顺序正式排序(非官方在 3.6 中)。

对于这些最新的 Python 版本,您可以改用list(my_dict)[-1]or list(my_dict.keys())[-1]

于 2013-04-20T21:23:27.853 回答
16

要求字典中的“最后一个”键是没有意义的,因为字典键是无序的。您可以获取键列表并根据需要获取最后一个键,但这绝不是“字典中的最后一个键”。

于 2013-04-20T21:16:34.647 回答
15

在 python 3.6 中,我从以下代码中获得了最后一个键的值

list(dict.keys())[-1]
于 2019-05-17T05:18:27.720 回答
8

由于 python 3.7 dict 总是有序的(插入顺序),

由于 python 3.8keys()values()dictitems()返回:视图可以是reversed

获取最后一个密钥

next(reversed(my_dict.keys()))  

同样适用于values()items()

PS获得第一个关键用途: next(iter(my_dict.keys()))

于 2020-07-23T16:42:45.120 回答
6
sorted(dict.keys())[-1]

否则,keys只是一个无序列表,“最后一个”是没有意义的,甚至在各种python版本上都可以不同。

也许您想研究OrderedDict

于 2013-04-20T21:19:33.597 回答
5

绝对有充分的理由需要 OrderedDict 的最后一个键。我在编辑用户时使用有序字典列出我的用户。我正在使用 AJAX 调用来更新用户权限并添加新用户。由于在检查权限时会触发 AJAX,因此为了方便起见,我希望我的新用户保持在显示列表中的相同位置(最后一个),直到我重新加载页面。每次脚本运行时,它都会重新排序用户字典。

这一切都很好,为什么需要最后一个条目?因此,当我为我的软件编写单元测试时,我想确认用户保持在最后一个位置,直到重新加载页面。

dict.keys()[-1]

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

于 2015-04-07T19:17:07.990 回答
1

您可以执行以下功能:

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

这不改变原来的字典!发生这种情况是因为 popitem() 函数返回一个元组,我们可以利用它为我们提供帮助!

于 2019-02-01T21:00:54.027 回答
1

肯定需要获取字典的最后一个元素,例如确认最新元素是否已附加到字典对象。

我们需要将字典键转换为列表对象,并使用索引 -1 打印出最后一个元素。

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

mydict.keys()

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

list(mydict.keys())

输出:['John', 'Mat', 'Jane', 'Kim', 'Kate']

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

输出:“凯特”

于 2019-02-08T08:11:10.763 回答
1

这将返回字典的最后一个元素:

dictObj[len(dictObj.keys()) - 1]
于 2021-06-05T07:24:24.273 回答
0
#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)
于 2021-03-04T08:38:52.260 回答
-4

是的,有:len(data)-1

对于第一个元素,它是:0

于 2016-10-13T17:16:42.110 回答