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)
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)
Dan*_*man 16
在字典中询问"last"键是没有意义的,因为字典键是无序的.如果你愿意,你可以获得密钥列表并获取最后一个密钥,但这在任何意义上都不是"字典中的最后一个密钥".
由于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()))
sorted(dict.keys())[-1]
Run Code Online (Sandbox Code Playgroud)
否则,keys它只是无序列表,最后一个没有意义,可以在各种python版本上有所不同.
绝对有很好的理由需要 OrderedDict 的最后一个键。我在编辑用户时使用有序的 dict 来列出我的用户。我正在使用 AJAX 调用来更新用户权限并添加新用户。由于 AJAX 在检查权限时触发,为了方便起见,我希望我的新用户保持在显示列表(最后)中的相同位置,直到我重新加载页面。每次脚本运行时,它都会重新排序用户字典。
一切都很好,为什么需要最后一个条目?因此,当我为我的软件编写单元测试时,我想确认用户保持在最后一个位置,直到页面重新加载。
dict.keys()[-1]
Run Code Online (Sandbox Code Playgroud)
完美地执行此功能(Python 2.7)。
| 归档时间: |
|
| 查看次数: |
86589 次 |
| 最近记录: |