2012-07-19 41 views
-1

可能重复:
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[0]]取代cat_sums[k],这给了我这样的::那么我想这

[] 

空列表。

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

注意,只是为了澄清,值是要等于某个整数值大于或等于0(虽然,可能会改变和负整数,可以稍后允许的,但目前还没有)

+0

我想你的意思是'cat_sums [k] [0]'而不是'cat_sums [k [0]]'。 – Isaac 2012-07-19 21:25:39

+0

不要使用'has_key',它已被弃用。使用'if k not in cat_sums:' – Daenyth 2012-07-19 21:31:21

+0

由OP复制:http://stackoverflow.com/q/11533650/1025391 – moooeeeep 2012-07-19 22:12:55

回答

0

你正在给列表添加一个数字。试试

if not cat_sums.has_key(k): 
    cat_sums[k] = [0] 
cat_sums[k][0] += value 
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] 
2

要使用defaultdict(list)我不认为 - 它看起来像你想做的事:

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

在一个侧面说明:if not cat_sums.has_key(k)被Pythonically写成if k not in cat_sums - 但这不应该使用需要如果我理解正确。

相关问题