d={'Bat':1,'Tennisball':3,'Racquet':2,'Shuttlecock':3,'Javelin':1,'Soccer':1,'Hockey':7,'Gloves':8}
我想要字典的最后一個值不是鍵
uj5u.com熱心網友回復:
在O(1)中,最有效的方法是使用dict.popitem:
k, last_value = _, d[k] = d.popitem()
從 Python 3.7 開始保證 LIFO 順序(保證字典插入順序時的相同版本)。
如果雙重分配看起來太棘手,請考慮
last_value = d[next(reversed(d))]
以下是時序比較(Linux 上的 CPython 3.10):
>>> d={'Bat':1,'Tennisball':3,'Racquet':2,'Shuttlecock':3,'Javelin':1,'Soccer':1,'Hockey':7,'Gloves':8}
>>> timeit k, last_value = _, d[k] = d.popitem()
107 ns ± 3.34 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
>>> timeit next(reversed(d.values()))
150 ns ± 0.237 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
>>> timeit d[next(reversed(d))]
134 ns ± 0.503 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
uj5u.com熱心網友回復:
Python 檔案(v3.7 )說:
對字典執行 list(d) 以插入順序回傳字典中使用的所有鍵的串列(如果要對其進行排序,只需使用 sorted(d) 代替)。要檢查單個鍵是否在字典中,請使用 in 關鍵字。
因此list(d)[-1]導致最終鍵,d[list(d)[-1]]將回傳最終值。
在 python 3.7 之前,字典是無序的。
uj5u.com熱心網友回復:
如果您的代碼依賴于最后一個值,您可能會遇到設計問題。雖然 dicts 在 3.7 中是按插入順序排列的,但它們的主要目的是將鍵映射到值。
話雖如此,您可以使用
last = next(reversed(d.values()))
請注意,next如果您的字典可能為空,則可以采用可選的后備值。
uj5u.com熱心網友回復:
對于最后一個值,您可以使用代碼print(list(d.values())[-1])將字典轉換為值串列,然后使用 [-1] 獲取最后一個值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/456008.html
上一篇:如何從嵌套字典中繪制箱線圖
