Python字典将所有值设置为类对象

时间:2017-04-05 14:05:07

标签: python class dictionary

在从一个数据帧列创建字典作为键之后,我想将所有值设置为对象的实例(该类用作存储原始pandas数据帧的每一行的键统计信息的容器)。

因此,我试过这个:

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类对象。 我怎样才能创建一个字典,每个键都有一个单独的类实例作为值?

1 个答案:

答案 0 :(得分: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)

我们将类型dict传递给defaultdict的原因是第一个参数应该可以为defaultdict调用。否则,您可能会遇到TypeError

或者,您也可以传递一个lambda表达式,使其可以调用