Python字典中的最后一个键

cbb*_*ail 39 python python-2.7

我很难弄清楚Python字典中最后一个键的语法是什么.我知道对于Python列表,可以说这是表示最后一个:

list[-1]
Run Code Online (Sandbox Code Playgroud)

我也知道可以得到字典键的列表如下:

dict.keys()
Run Code Online (Sandbox Code Playgroud)

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

dict.keys(-1)
Run Code Online (Sandbox Code Playgroud)

它说密钥不能接受任何论证,而且给出了1.如果密钥不能使用args,那么我怎么能表示我想要列表中的最后一个密钥呢?

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

我现在被告知字典键不是根据添加时间的顺序排列的.那我怎么能选择最近添加的密钥呢?

roo*_*oot 35

如果广告订单很重要,请查看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')
Run Code Online (Sandbox Code Playgroud)

  • 对于`python 3`使用`list(od.keys())[ - 1]` (8认同)
  • 我得到'TypeError:'odict_keys'对象在执行`od.keys()[ - 1]`时不支持索引.使用Python 3.6.1. (3认同)

Sam*_*uns 34

看起来你想这样做:

dict.keys()[-1]
Run Code Online (Sandbox Code Playgroud)

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

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

也许你想在之前对它们进行排序.看起来像这样:

sorted(dict.keys())[-1]
Run Code Online (Sandbox Code Playgroud)

  • 在Python3中,它对我有用:`list(dict.keys())[ - 1]` (10认同)
  • 只是对dict.keys()[ - 1]的评论这适用于Python 2.7*,但不适用于Python 3.Python 3将出错:TypeError:'dict_keys'对象不支持索引 (7认同)
  • 值得注意的是,字典键从 Python 3.7 开始正式排序(在 3.6 中非正式排序)。 (6认同)
  • @abe你实际上可以进一步缩短它:`[*dict.keys()][-1]` (2认同)

Dan*_*man 16

在字典中询问"last"键是没有意义的,因为字典键是无序的.如果你愿意,你可以获得密钥列表并获取最后一个密钥,但这在任何意义上都不是"字典中的最后一个密钥".

  • 不,绝对不是!字典**不是**将成为您编辑它的顺序.它是*任意*顺序,具体取决于密钥的哈希值. (12认同)
  • @cbbcbail 你编辑问*“那我怎么才能选择最近添加的密钥?”* 答案仍然是你不能 - 该信息根本没有存储在`dict`中。您需要使用另一种数据结构(例如“OrderedDict”),或者简单地手动将变量与最后添加的值放在一起。 (2认同)

小智 15

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

list(dict.keys())[-1]
Run Code Online (Sandbox Code Playgroud)


Але*_*вин 6

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

由于python 3.8 dict的keys()、values()和items()返回:可以反转的视图:

获取最后一个键:

next(reversed(my_dict.keys()))  
Run Code Online (Sandbox Code Playgroud)

同样适用于 values() 和 items()

PS,要获得第一个密钥使用:next(iter(my_dict.keys()))

  • 荣誉。这就是我一直在寻找的。list(dict.values())[-1] 是搬起石头砸自己的脚,表现最差!如果我想这样做,我会在开始时使用列表而不是字典。 (2认同)
  • `reversed(d)` 这是 `reversed(d.keys())` => `next(reversed(my_dict.keys()))` => `next(reversed(my_dict))` & `next 的快捷方式(iter(my_dict.keys()))` => `下一个(iter(my_dict))` (2认同)

0x9*_*x90 5

sorted(dict.keys())[-1]
Run Code Online (Sandbox Code Playgroud)

否则,keys它只是无序列表,最后一个没有意义,可以在各种python版本上有所不同.


Eri*_*oss 5

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

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

dict.keys()[-1]
Run Code Online (Sandbox Code Playgroud)

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