2021年6月8日 星期二

defaultdict不適合初值0

 defaultdict一般的用法:

from collections import defaultdict multi_dict = defaultdict(list) key_values = [('even',2),('odd',1),('even',8),('odd',3),('float',2.4),('odd',7)] for key,value in key_values: multi_dict[key].append(value) print(multi_dict) # 會輸出defaultdict(<class 'list'>, {'float': [2.4], 'even': [2, 8], 'odd': [1, 3, 7]})

但是

若我們想要直接給予一個固定的值給defaultdict是不行的,會產生TypeError的例外,比如說是在統計元素個數的狀況下,我想要讓default值為0,那有一個方法就是建構一個生成0的函數:


from collections import defaultdict def zero(): return 0 counter_dict = defaultdict(zero) # default值以一個zero()方法產生 a_list = ['a','b','x','a','a','b','z'] for element in a_list: counter_dict[element] += 1 print(counter_dict) # 會輸出defaultdict(<function zero at 0x7fe488cb7bf8>, {'x': 1, 'z': 1, 'a': 3, 'b': 2})


這是一種方法, 但是不夠簡潔, 可用:

# nums: List[int]
c = {}
for i in range(len(nums)):
    c[nums[i]] = c.get(nums[i], 0) + 1

沒有留言:

張貼留言