我创建了三个字典:dict1,dict2和dict2。我想先用dict2更新dict1,然后用dict3更新字典。我不确定为什么他们没有加起来。

def wordcount_directory(directory):
    dict = {}
    filelist=[os.path.join(directory,f) for f in os.listdir(directory)]
    dicts=[wordcount_file(file) for file in filelist]
    dict1=dicts[0]
    dict2=dicts[1]
    dict3=dicts[2]
    for k,v in dict1.iteritems():
        if k in dict2.keys():
            dict1[k]+=1
        else:
            dict1[k]=v
    for k1,v1 in dict1.iteritems():
        if k1 in dict3.keys():
            dict1[k1]+=1
        else:
            dict1[k1]=v1
return dict1

print wordcount_directory("C:\\Users\\Phil2040\\Desktop\\Word_count")

最佳答案

也许我不明白您提出的问题是对的,但是您是否尝试将每个词典中的所有值加到一个最终词典中?如果是这样的话:

dict1 = {'a': 1, 'b': 2, 'c': 3}
dict2 = {'b': 5, 'c': 1, 'd': 9}
dict3 = {'d': 1, 'e': 7}

def add_dict(to_dict, from_dict):
    for key, value in from_dict.iteritems():
        to_dict[key] = to_dict.get(key, 0) + value

result = dict(dict1)
add_dict(result, dict2)
add_dict(result, dict3)
print result


这将产生:{'a': 1, 'c': 4, 'b': 7, 'e': 7, 'd': 10}

发布期望的结果应该对您的问题很有帮助。

编辑:

对于任意数量的词典:

result = dict(dicts[0])
for dict_sum in dicts[1:]:
    add_dict(result, dict_sum)
print(result)


如果您真的想使用原始格式将原始问题的代码修复为:


您应该在执行dict1[k]+=1时使用dict1[k]+=dict2.get(k, 0)
get的引入消除了使用if语句检查其存在的需要。
您需要遍历dict2dict3将新密钥从它们引入dict1
(这并不是真正的问题,但是值得一提)在if语句中检查键是否在字典中,建议简单地对if k in dict2:进行操作(有关更多详细信息,请参见this post


通过@DisplacedAussie发现的惊人的内置库,答案可以进一步简化:

from collections import Counter

print(Counter(dict1) + Counter(dict2) + Counter(dict3))


结果产生:Counter({'d': 10, 'b': 7, 'e': 7, 'c': 4, 'a': 1})

Counter对象是dict的子类,因此可以与标准dict相同的方式使用。

10-05 22:04