3 回答

TA贡献1784条经验 获得超7个赞
问题是因为您使用可变对象作为fromkeys.
这在这里更清楚:
d = dict.fromkeys(['a', 'b'], [])
d['a'].append(1)
print(d)
输出
{'a': [1], 'b': [1]}

TA贡献1833条经验 获得超4个赞
使用字典理解来创建c:
c = {k: {} for k in a.keys()}
for doc in b.keys():
for word in b[doc].keys():
c[doc][word] = a[doc][word]*b[doc][word]
print(c)
# {'d1': {'a': 1, 'b': 0}, 'd2': {'a': 0, 'c': 16}, 'd3': {'a': 1, 'b': 4, 'c': 16}}
请注意使用fromkeysvs 字典理解时的区别:
c = dict.fromkeys(a.keys(),{})
print([id(o) for o in c.values()])
# [53649152, 53649152, 53649152]
# same object reference id!
c = {k: {} for k in a.keys()}
print([id(o) for o in c.values()])
# [53710208, 53649104, 14445232]
# each object has different reference id

TA贡献1827条经验 获得超9个赞
for对您的循环进行了修改:
for doc in b.keys():
for word in b[doc].keys():
if doc not in c:
c[doc]={}
c[doc][word] = a[doc][word]*b[doc][word]
print(c)
#{'d1': {'a': 1, 'b': 0}, 'd2': {'a': 0, 'c': 16}, 'd3': {'a': 1, 'b': 4, 'c': 16}}
添加回答
举报