2017-04-05 1 views
0

하나의 데이터 프레임 열에서 키로 사전을 생성 한 후 모든 값을 객체의 인스턴스로 설정합니다 (이 클래스는 해당 객체의 각 행에 대한 주요 통계를 저장하기위한 컨테이너 역할을합니다). 원래 팬더 데이터 프레임).파이썬 사전은 모든 값을 클래스 객체로 설정합니다.

따라서, 나는이 시도 :

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'는 하나의 열로 구성된 데이터 프레임입니다 – SuperMartingale

+0

dict 재귀는 어떻게됩니까? 'isin_dict = {key : isin_dict의 키를위한 key : Bond()}'참고 : 팬더 DF를 반복하는 방법에 익숙하지 않기 때문에 직접 작동하지 않을 수도 있습니다. 그러나'dict. @DineshKumar 덕분에 iterable – Adirio

답변

1

이 이유는 이미 here

dict.fromKeys() 모든 키에 대해 동일한 값을 사용하여 설명한다.

해결책은 사전 보급을 사용하거나 defaultdict을 콜렉션 모듈에서 사용하는 것입니다.

샘플 코드는 우리가 defaultdict에 유형 dict을 전달하는 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) 

이유를 사용하는 첫 번째 인수가 defaultdict에 대한 호출해야되는. 다른 사람은

는 다른 방법으로 당신은 또한`list_of_isins`은 무엇

+0

을 기대할 수있는 fromkeys()', 독해력을 가지고 작동하며 각 행에는 자체 클래스 인스턴스가 있습니다. – SuperMartingale

+0

@SuperMartingale 도움이 되었으면 좋겠습니다. 당신은 또한 코드를 단순화하고 싶습니다 defaultdict 사용할 수 있습니다. 나는 당신에게 구현을 떠날 것이다 :) – DineshKumar

관련 문제