python 字典 setdefault() 函式和get() 方法類似,
語法:
dict.setdefault(key, default=value)
如果鍵(key)不存在於字典中,將會新增鍵(key)並將值設為預設值(value)。
如果鍵(key)已經存在, 則什麼也不做
例項:
dict ="value : %s
" % dict.setdefault('
runoob
', none)
"value : %s
" % dict.setdefault('
taobao
', '
**')
#longer.. harder to read
values ={}
for element in
iterable:
if element not
invalues:
values[element] =
#better.. use dict.setdefault method
values ={}
for element in
iterable:
#將data的資料更新到stack中的列表中
data =
stack =
#方式一 low
for element in
data:
#element = user, user1, user2
if element not
instack:
stack[element] =
#方式二 better
for element in
data:
print(stack) #
邏輯:
1 以使用者的唯一標示為鍵,再以使用者的訪問記錄的列表為值
2 在使用者下一次訪問時判斷列表的最後乙個時間戳是否小於(當前時間-頻率時間);如果小於,則剔除;
3 然後再判斷列表的長度時候超過頻率數,如超過,則return false,else true
資料結構:
**實現
classvisitthrottlebetter(basethrottle):
"""優化過**的頻率限制類
"""def
__init__
(self):
self.visited_record =none
defallow_request(self, request, view):
"""在allow_request中編寫頻率業務邏輯
"""remote_addr = request.meta.get('
remote_addr')
#print(remote_addr)
ctime =time.time()
#1 有記錄來則將其新增到訪問記錄裡
visit_record.setdefault(remote_addr, ).insert(0, ctime)
#2 判斷列表的最後乙個是否小於(當前時間-頻率時間);如果小於,則剔除;
self.visited_record =visit_record.get(remote_addr)
while self.visited_record and self.visited_record[-1] < ctime - 60:
self.visited_record.pop()
#3 然後再判斷列表的長度是否超過頻率數,如不超過,則return true,else false
if len(self.visited_record) <= 3:
#/不超過頻率數
return
true
else
:
#/超過頻率數
return
false
defwait(self):
"""如果allow_request中沒有通過, wait裡寫再等多少秒就可以訪問了
"""ctime =time.time()
first_visit_duration = ctime - self.visited_record[-1] #
現在離第一次訪問過了多久啦
return 60 - first_visit_duration
字典setdefault使用
字典setdefault方法的使用 d.setdefault k,default 如果有k,則返回。如果沒有則讓 k default,然會返回default 案例 統計文字中每個單詞出現的位置 格式 import re import sys 返回pattern物件 word re re.compil...
Python 字典的setdefault 方法
setdefault key default if key is in the dictionary,return its value.if not,insert key with a value of default and return default.default defaults to n...
字典中setdefault 函式用法
python 字典中乙個 方法 setdefault 來看下說明 如果沒有 key 會加入 這個key setdefault key default 並且可以指定 乙個預設值,如果沒有指定,則認為是none 返回,如果 指定了default 則直接返回 default值 如果有這個key 直接返回字...