迭代字典的值不起作用(错误是'int'对象不是可迭代的)

时间:2012-07-19 21:18:35

标签: python list dictionary iteration

  

可能重复:
  Getting 'int' object is not iterable

所以我试图根据其他一些代码为字典添加一个值:

if not cat_sums.has_key(k):
        cat_sums[k] = 0
cat_sums[k] += value

字典看起来像这样:

cat_sums =     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]})

我得到了:

    cat_sums[k] += value
TypeError: 'int' object is not iterable

这是有道理的,因为第一次迭代的cat_sums [k] = [0],而[0]不是整数,它是一个列表。所以我试过这个:

print cat_sums[k[0]]

要查看它会输出什么,就是看我是否应该用cat_sums[k]替换cat_sums[k[0]],但是这给了我这个:

[]

空列表。

那么如何在字典cat_sums中添加值,遍历每个键?我在这里做错了什么?

注意,只是为了澄清,值将等于某个大于或等于0的整数值(但是,这可能会改变,以后可能会允许使用负整数,但尚未允许)

3 个答案:

答案 0 :(得分:4)

这种数据结构有点令人困惑。也许您应该尝试使用不同类型的defaultdict:

cat_sums=defaultdict(int)
cat_sums[k]+=value

当然,如果你想不断向列表中添加元素:

cat_sums=defaultdict(list)
cat_sums[k].append(value)  #same thing as cat_sums[k]+=[value]

答案 1 :(得分:2)

我认为您不想使用defaultdict(list) - 看起来您想要这样做:

dd = defaultdict(int)
for x in y:
    dd[x] += 5

旁注:if not cat_sums.has_key(k)以Python编写为if k not in cat_sums - 但如果我理解正确,则不需要使用defaultdict(int)

答案 2 :(得分:0)

您正在为列表添加号码。尝试

if not cat_sums.has_key(k):
    cat_sums[k] = [0]
cat_sums[k][0] += value