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 に答える