2017-04-05 1 views
0

1つのデータフレーム列からキーとして辞書を作成した後、すべての値をオブジェクトのインスタンスに設定します。元のパンダのデータフレーム)。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

それが呼び出し可能になりますラムダ式を渡すことができますか – RomanPerekhrest

+0

'list_of_isins'は1つの列からなるデータフレームです – SuperMartingale

+0

dict再帰はどうですか? 'isin_dict = {key:isin_dictのキーのためのkey:Bond()}'注:これは私がパンダDFを反復処理する方法に慣れていないので直接動作しないかもしれませんが、 'dict。 @DineshKumarのおかげでiterable – Adirio

答えて

1

この理由は、すでにhere

dict.fromKeys()は、すべてのキーに同じ値を使用して説明されています。

解決策は、辞書の補完を使用するか、コレクションモジュールのdefaultdictを使用することです。我々はdefaultdictにタイプdictを渡している理由は、最初の引数は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) 

を使用する

サンプルコード。そうでなければあなたは

代わりにTypeError例外を取得することがあります。また `list_of_isins`は何ですか?

+0

が期待されているfromkeys() 'は、辞書の理解と動作し、各行には独自のクラスインスタンスがあります。 – SuperMartingale

+0

@SuperMartingale私は助けてくれるとうれしいです。あなたはまた、コードを簡素化したいのですか?私はあなたに実装を残します:) – DineshKumar

関連する問題