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”参数是否有问题?
答案 0 :(得分:6)
您的每个值都是一个列表。 +
运算符应用于列表时会将 iterable 添加到列表中。它不附加单个值:
>>> [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)
。
答案 1 :(得分:0)
+
是连接。正如BrenBarn所说,[1, 2] + [3, 4] == [1, 2, 3, 4]
。
但是,如果您实际上正在尝试添加数字,正如您的声明所暗示的那样“我正在尝试将值添加到catnums中的另一个值”,那么append
将无法执行您想要的操作。
如果是这种情况,那么您显示的字典可能不正确。这不是单词到数字的映射;它是单词到数字列表的映射(即列表[0]
)。如果你想保持一个单词的数量,这不是你想要的;你想要{'composed': 0, 'elated': 0, ...}
(注意缺少方括号)。然后+=
语句将按预期工作。
如果您无法更改字典但只想更改列表中的数字,则可以说cat_sums[cat][0] += value
。然而,简单地将“零列表”转换为普通的旧零将更有意义(如果这是你所追求的)。
答案 2 :(得分:0)
如果有人在Django模板中收到此错误,则...
当您这样做:
{% for c in cat_sums.keys %}
然后,在后台,Django模板语言首先尝试进行cat_sums['keys']
查找。通常,这将失败,并且Django接下来将寻找一种方法。但是由于这是defaultdict
,所以默认值将被存储。
如果字典是使用
创建的cat_sums = defaultdict(int)
执行的是:
for c in cat_sums['keys']:
即
for c in 0:
由于值0
不可迭代,因此正确地引发了错误。
分辨率?在上下文中传递dict(cat_sums)
,以便视图获得常规的dict
。