2017-04-05 148 views
0

從一個數據框列創建字典作爲關鍵字後,我想將所有值設置爲對象的實例(該類用作存儲每個行的關鍵統計信息的容器原熊貓數據框)。Python字典將所有值設置爲類對象

因此,我嘗試這樣做:

class Bond: 
    def __init__(self): 
     self.totalsize = 0 
     self.count = 0 

if __name__ == '__main__': 

    isin_dict = list_of_isins.set_index('isin').T.to_dict() 
    isin_dict = dict.fromkeys(isin_dict, Bond()) 

的問題是,在isin_dict指向同一地址的所有值,即所有行共享相同的Bond類對象。 我怎樣才能創建一個字典與每個鍵持有一個單獨的類實例值?

+0

是什麼'list_of_isins'? – RomanPerekhrest

+0

'list_of_isins'是一個數據幀,由一列組成 – SuperMartingale

+0

字典遞歸怎麼樣? 'isin_dict = {key:Bond()for key inin_dict}'注意:這可能不會直接工作,因爲我不熟悉如何遍歷熊貓DF,但我認爲它可以像'dict一樣使用它。 fromkeys()'@DineshKumar表示可以迭代 – Adirio

回答

1

的原因已經解釋here

dict.fromKeys()使用每個鍵的相同的值。

解決方案是使用字典解析或從集合模塊中使用defaultdict

示例代碼使用defaultdict

from collections import defaultdict  

class Bond: 

    def __init__(self): 
     pass   

# I have just used your variable and stored in a list 
d = defaultdict(lambda : list(list_of_isins.set_index('isin').T)  

for keys in d: 
    d[keys] = Bond() 

print (d) 

原因我們傳遞的類型dictdefaultdict是第一個參數應該defaultdict可調用。否則,你可能會得到一個類型錯誤

或者你也可以傳遞一個lambda表達式,這將使它調用

+0

,字典理解起作用,每行都有它自己的類實例 – SuperMartingale

+0

@SuperMartingale我很高興它有幫助。你也可以使用defaultdict,你想簡化代碼。我會把實施留給你:) – DineshKumar