2013-12-13 41 views
0

我tryed閱讀的話題的東西,但我不能想出一個可行的解決方案。不需要通用類字典更新,而不是單一類字典更新蟒蛇

我有這種類型的詞典:

class flux(object): 
    def __init__(self, count_flux=0, ip_c_dict=defaultdict(int), ip_s_dict=defaultdict(int), conn_dict=defaultdict(int)): 
     self.count_flux = count_flux 
     self.ip_c_dict = ip_c_dict if ip_c_dict is not None else {} 
     self.ip_s_dict = ip_s_dict if ip_s_dict is not None else {} 
     self.conn_dict = conn_dict if conn_dict is not None else {} 

每次我嘗試更新這樣的詞典:

dictionary[key].ip_c_dict[some_string]+=1 

不僅是當前關鍵的詞典被更新,但也是所有其他人。當然,它也適用於類中的所有三個字典,ip_c_dict = defaultdict(int),ip_s_dict = defaultdict(int),conn_dict = defaultdict(int)。

我該如何解決?

+0

能否請你告訴更多的代碼? – thefourtheye

回答

3

我在這個問題的答案,你不應該把類型的字典在默認參數,因爲那時http://stardict.sourceforge.net/Dictionaries.php下載結束了所有的實例之間共享的說。默認參數中的defaultdict(int)只被計算一次(當方法第一次被創建時),然後調用該方法的所有時間都使用與默認相同的dict。

所以放回ip_c_dict =無參數列表,並且下面放

self.ip_c_dict = ip_c_dict if ip_c_dict is not None else defaultdict(int) 

這樣一個新的defaultdict(INT)會在每次創建,如果ip_c_dict說法是沒有。

+1

這裏有一個解釋http://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument – Leifingson

+0

現在確定它是真正清楚。非常感謝你! – user2961420