2012-07-18 45 views
-1
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()函数内的“猫”参数有问题吗?

+0

请提供'worddict','catnums'和'categories'的示例数据,以便其他人重现您的错误。 – moooeeeep 2012-07-19 22:11:46

回答

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)

0

+当应用于列表时是串联。正如BrenBarn所说,[1, 2] + [3, 4] == [1, 2, 3, 4]

但是,如果你实际上试图添加数字,正如你的声明所暗示的那样:“我试图给catnums中的另一个值添加一个值”,那么append就不会做你想要的。

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

如果您不能更改字典,但只是想更改列表中的号码,可以说cat_sums[cat][0] += value。但是,如果将“零列表”简单地转换为普通的旧零,它将变得更有意义(如果这就是你所追求的)。

相关问题