本文和大家分享的主要是python
中defaultdict的使用,dict
很好理解,可是有一個使用起來不方便的地方在于,需要進行初始值是否初始化的判斷,具體的下面將和大家詳細介紹,希望對大家
學習python有所幫助。
list = ["aaa", "bbb", "ccc"]
kv = {}
for d
in list:
if kv[d.id]:
kv[d.id] += 1
else:
kv[d.id] = 1
對于python
來說,這很不酷,所以,
defaultdict
這個東西就出現(xiàn)了,上面的代碼,可以改為:
from collections
import defaultdict
list = ["aaa", "bbb", "ccc"]
kv = defaultdict(
int)
for d in list:
kv[d.id] += 1
也就是說,defaultdict
能自動將沒有創(chuàng)建的值,使用傳入的函數(shù)來初始化,比如傳入
list
,就能直接創(chuàng)建列表,使用的時候可以直接
append
。
除了這些基礎用法,還有更加hack
的用法,比如如下這個需求:
為對象進行編號,如果某幾個屬性相同,那么編為同一組。
這并不是一個多復雜的需求,只是用defaultdict
來實現(xiàn),會顯得比其他方法優(yōu)雅很多:
from collections
import defaultdict
from itertools
import count
group_value = defaultdict(count().__next__)
group_value_list = [group_value[(o.p1, o.p2, o.p3)]
for o
in object_list]
使用了count
的
next
方法,在往group_value
設置值的時候,會自動生成一個值,當
key
相同的時候,值是相同的,當
key
不同的時候,自動將數(shù)字增加
1
,當做值,這樣,就能生成一個分組的列表了。
defaultdict
增強了原
dict
的功能,并且如果創(chuàng)造力足夠,會讓程序更加優(yōu)雅。
來源:網絡