检索Python字典的最后一个值

Sah*_*hil 3 python dictionary

d={'Bat':1,'Tennisball':3,'Racquet':2,'Shuttlecock':3,'Javelin':1,'Soccer':1,'Hockey':7,'Gloves':8}
Run Code Online (Sandbox Code Playgroud)

我想要字典的最后一个值而不是键

wim*_*wim 6

最有效的方法是使用O(1)dict.popitem

\n
k, last_value = _, d[k] = d.popitem()\n
Run Code Online (Sandbox Code Playgroud)\n

从 Python 3.7 开始就保证了 LIFO 顺序(保证字典插入顺序的版本相同)。

\n

如果双重赋值看起来太棘手,请考虑

\n
last_value = d[next(reversed(d))]\n
Run Code Online (Sandbox Code Playgroud)\n

以下是时序比较(Linux 上的 CPython 3.10):

\n
>>> d={\'Bat\':1,\'Tennisball\':3,\'Racquet\':2,\'Shuttlecock\':3,\'Javelin\':1,\'Soccer\':1,\'Hockey\':7,\'Gloves\':8}\n>>> timeit k, last_value = _, d[k] = d.popitem()\n107 ns \xc2\xb1 3.34 ns per loop (mean \xc2\xb1 std. dev. of 7 runs, 10000000 loops each)\n>>> timeit next(reversed(d.values()))\n150 ns \xc2\xb1 0.237 ns per loop (mean \xc2\xb1 std. dev. of 7 runs, 10000000 loops each)\n>>> timeit d[next(reversed(d))]\n134 ns \xc2\xb1 0.503 ns per loop (mean \xc2\xb1 std. dev. of 7 runs, 10000000 loops each)\n
Run Code Online (Sandbox Code Playgroud)\n

  • 这是非常聪明、有启发性且发人深省的解决方案,但是,它是 python,我希望它仍然可供人类阅读。 (3认同)
  • @KellyBundy,它的时间为“每个循环 119 ns ± 1.23 ns(7 次运行的平均值 ± 标准差,每次 10000000 次循环)” (2认同)