0
    cat_sums[cat] += value
TypeError: 'int' object is not iterable

我的输入是这样的:

defaultdict(<type 'list'>, {'composed': [0], 'elated': [0], 'unsure': [0], 'hostile': [0], 'tired': [0], 'depressed': [0], 'guilty': [0], 'confused': [0], 'clearheaded': [0], 'anxious': [0], 'confident': [0], 'agreeable': [0], 'energetic': [0]})

这被分配给一个叫做 catnums 的东西

accumulate_by_category(worddict, catnums, categories)

        def accumulate_by_category(word_values, cat_sums, cats):
                for word, value in word_values.items():
                        for cat in cats[word]:
                                cat_sums[cat] += value

现在据我所知,我并不是要迭代一个整数。我正在尝试将一个值添加到 catnums 中的另一个值。

是否有可能在我的 accumulate_by_category() 函数中的“cats”参数有问题?

4

3 回答 3

6

您的每个值都是一个列表。运算符在+应用于列表时会向列表添加一个可迭代对象。它不附加单个值:

>>> [1,2] + [3,4]
[1, 2, 3, 4]
>>> [1,2] + 3
TypeError: can only concatenate list (not "int") to list

看起来你想做cat_sums[cat].append(value)

于 2012-07-18T02:56:55.420 回答
0

+,当应用于列表时,是连接。正如布伦巴恩所说,[1, 2] + [3, 4] == [1, 2, 3, 4].

但是,如果您实际上是在尝试添加数字,正如您的陈述“我正在尝试将一个值添加到 catnums 中的另一个值”所暗示的那样,那么append您将不会做您想做的事情。

如果是这种情况,那么您显示的字典可能不正确。这不是单词到数字的映射;它是单词到数字列表(即 list [0])的映射。如果您想保持字数,这不是您想要的;你想要{'composed': 0, 'elated': 0, ...}(注意缺少方括号)。然后该+=语句将按预期工作。

如果您无法更改字典而只是想更改列表中的数字,您可以说cat_sums[cat][0] += value。但是,将“零列表”简单地转换为普通的旧零会更有意义(如果这是您所追求的)。

于 2012-07-19T03:01:10.603 回答
0

如果有人在 Django 模板中遇到此错误……</p>

当你这样做时:

{% for c in cat_sums.keys %}

然后,在幕后,Django 模板语言首先尝试cat_sums['keys']查找。通常这会失败,Django 接下来会寻找一个方法。但由于这是 a defaultdict,因此将存储默认值。

如果字典是用

cat_sums = defaultdict(int)

被执行的是:

for c in cat_sums['keys']:

IE,

for c in 0:

由于该值0不可迭代,因此非常正确地引发了错误。

解析度?在上下文中传递dict(cat_sums),以便视图获得常规的dict.

于 2019-02-13T23:09:56.877 回答