所以我试图根据其他一些代码为字典添加一个值:
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的整数值(但是,这可能会改变,以后可能会允许使用负整数,但尚未允许)
答案 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