在从一个数据帧列创建字典作为键之后,我想将所有值设置为对象的实例(该类用作存储原始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
类对象。
我怎样才能创建一个字典,每个键都有一个单独的类实例作为值?
答案 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表达式,使其可以调用