[英]How to only store 3 values for a key in a dictionary? Python
所以我試着只允許程序只存儲每個鍵(名稱)的最后3個分數(值)但是我遇到的問題是程序只存儲3個分數然后不更新最后3個或程序附加更多值然后它應該做。
我到目前為止的代碼:
#appends values if a key already exists
while tries < 3:
d.setdefault(name, []).append(scores)
tries = tries + 1
雖然我無法完全理解你的問題,但我從中得出的概念是,你只想在列表中存儲最后三個分數。 這是一項簡單的任務。
d.setdefault(name,[]).append(scores)
if len(d[name])>3:
del d[name][0]
此代碼將檢查每次添加時列表的長度是否超過3。 如果超過,則刪除第一個元素(在最后三個元素之前添加)
使用collections.defaultdict + collections.deque ,最大長度設置為3:
from collections import deque,defaultdict
d = defaultdict(lambda: deque(maxlen=3))
然后d[name].append(score)
,如果該鍵不存在,將創建鍵/值,如果它確實存在,我們將只追加。
從列表的開頭刪除元素是一種低效的解決方案。
演示:
from random import randint
for _ in range(10):
for name in range(4):
d[name].append(randint(1,10))
print(d)
defaultdict(<function <lambda> at 0x7f06432906a8>, {0: deque([9, 1, 1], maxlen=3), 1: deque([5, 5, 8], maxlen=3), 2: deque([5, 1, 3], maxlen=3), 3: deque([10, 6, 10], maxlen=3)})
保留python中最后N個項的一個好方法是使用帶有maxlen N的deque
,因此在這種情況下,您可以使用collections
模塊中的defaultdict
和deque
函數。
例如:
>>> from collections import defaultdict ,deque
>>> l=[1,2,3,4,5]
>>> d=defaultdict()
>>> d['q']=deque(maxlen=3)
>>> for i in l:
... d['q'].append(i)
...
>>> d
defaultdict(<type 'collections.deque'>, {'q': deque([3, 4, 5], maxlen=3)})
from collections import defaultdict
d = defaultdict(lambda:[])
d[key].append(val)
d[key] = d[key][:3]
len(d[key])>2 or d[key].append(value) # one string solution
如果要擴展條目name
的列表,請稍微改變另一個答案
d.setdefault(name,[]).extend(scores)
if len(d[name])>3:
del d[name][:-3]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.