所以我試圖只允許程序只存儲每個鍵(名字)的最後3個分數(值),但是我遇到了只存儲3分的程序問題,然後沒有更新最後3個或程序附加它應該做更多的價值。如何僅爲字典中的鍵存儲3個值? Python
的代碼,我到目前爲止有:
#appends values if a key already exists
while tries < 3:
d.setdefault(name, []).append(scores)
tries = tries + 1
所以我試圖只允許程序只存儲每個鍵(名字)的最後3個分數(值),但是我遇到了只存儲3分的程序問題,然後沒有更新最後3個或程序附加它應該做更多的價值。如何僅爲字典中的鍵存儲3個值? Python
的代碼,我到目前爲止有:
#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)
,如果密鑰不存在的鍵/值將被創建,如果它存在,我們只會追加。
從列表的開頭刪除元素是一種效率低下的解決方案。
演示:保持在蟒蛇最後N項
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)})
@georg,謝謝。 – 2015-02-08 21:25:42
的一個好方法是使用deque
與MAXLEN N,所以在這種情況下,你可以使用defaultdict
和deque
功能從collections
模塊。
例如:
>>> 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]
擴展列表,這正是我試圖potray另一個答案細微變化: ) 謝啦。 – 2015-02-08 20:13:41
@NewPythonUser:很高興幫助。隨時接受我的回答,如果它已經幫助你 – 2015-02-08 20:14:37