d={'Bat':1,'Tennisball':3,'Racquet':2,'Shuttlecock':3,'Javelin':1,'Soccer':1,'Hockey':7,'Gloves':8}
Run Code Online (Sandbox Code Playgroud)
我想要字典的最后一个值而不是键
最有效的方法是使用O(1)dict.popitem
:
k, last_value = _, d[k] = d.popitem()\n
Run Code Online (Sandbox Code Playgroud)\n从 Python 3.7 开始就保证了 LIFO 顺序(保证字典插入顺序的版本相同)。
\n如果双重赋值看起来太棘手,请考虑
\nlast_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