(1(:这确实有效,但不会累积。
word_dict = {'now': 3, 'this': 3, 'now': 2, 'this': 2}
new_word_dict = {}
for word in word_dict:
n = word_dict.get(word)
new_word_dict[word] = n
print(new_word_dict)
(1( 结果
{'now': 2}
{'now': 2, 'this': 2}
(2( :这不管用。KeyError是什么?
word_dict = {'now': 3, 'this': 3, 'now': 2, 'this': 2}
new_word_dict = {}
for word in word_dict:
n = word_dict.get(word)
new_word_dict[word] += n
print(new_word_dict)
(2( 结果
----> new_word_dict[word] += n
KeyError: 'now'
KeyError是因为您试图增量的键不存在,但我认为在您的示例中存在的不仅仅是这个问题。
假设您想要的结果是new_word_dict
是word_dict
的累积,那么您首先需要将word_dict
的类型更改为元组列表(因为,正如@deceze在评论中指出的,dicts中不允许重复键(。所以我认为你想得到这样的东西:
words == [("now", 3), ("this", 3), ("now", 2), ("this", 2)]
words_accumulated == {"now": 5, "this": 5}
然后你的循环可以改为
words = [("now", 3), ("this", 3), ("now", 2), ("this", 2)]
words_accumulated = {}
for word, val in words: # unpack each tuple into two variables
existing_val = words_accumulated.setdefault(word, 0) # if it doesn't exist yet, set to 0. This solves your KeyError
words_accumulated[word] = existing_val + val
要进一步研究如何更好地做到这一点,请查找defaultdict,也许还有itertools 中的一些工具
new_word_dict[word] += n
需要new_word_dict[word]的最新值,如果它没有初始化,就会崩溃。
要解决此问题,您可以检查newworddict是否存在,如下所示new_word_dict[word] = n if new_word_dict[word] else new_word_dict[word] + n
你可以使用太多的word_dict.items((,如for key, value in word_dict.items()