这个KeyError是什么意思?in python中dictionary的累加键值



(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_dictword_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()

相关内容

  • 没有找到相关文章

最新更新