Getting 'int' object is not iterable

后端 未结 3 685
慢半拍i
慢半拍i 2021-01-25 20:37
    cat_sums[cat] += value
TypeError: \'int\' object is not iterable

My input is this:

defaultdict(, {\'composed\'         


        
相关标签:
3条回答
  • 2021-01-25 21:13

    +, when applied to lists, is concatenation. As BrenBarn said, [1, 2] + [3, 4] == [1, 2, 3, 4].

    But if you are actually trying to add numbers, as implied by your statement "I'm trying to add a value to another value inside catnums," then append will not do what you want.

    If this is the case then the dictionary you show is probably incorrect. It's not a mapping of words to numbers; it's a mapping of words to lists of numbers (namely the list [0]). If you're trying to maintain a count of words, this is not what you want; you want {'composed': 0, 'elated': 0, ...} (note the lack of square brackets). Then the += statement will work as expected.

    If you cannot change the dictionary but simply want to change the number in the list, you can say cat_sums[cat][0] += value. However, it would make far more sense (if this is what you're after) to simply convert the "lists of zero" into plain old zeroes.

    0 讨论(0)
  • 2021-01-25 21:23

    Each of your values is a list. The + operator, when applied to lists adds an iterable to a list. It doesn't append a single value:

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

    It looks like you want to do cat_sums[cat].append(value).

    0 讨论(0)
  • 2021-01-25 21:35

    If anyone is getting this error inside a Django template …

    When you do:

    {% for c in cat_sums.keys %}
    

    then, behind the scenes, the Django template language first tries a cat_sums['keys'] lookup. Normally this would fail and Django would next look for a method. But since this is a defaultdict, the default value gets stored instead.

    If the dict was created with

    cat_sums = defaultdict(int)
    

    What gets executed is:

    for c in cat_sums['keys']:
    

    i.e.,

    for c in 0:
    

    which quite rightly throws an error as the value 0 is not iterable.

    Resolution? Pass dict(cat_sums) inside the context so the view gets a regular dict.

    0 讨论(0)
提交回复
热议问题