2012-07-18 40 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。但是,如果將「零列表」簡單地轉換爲普通的舊零,它將變得更有意義(如果這就是你所追求的)。