在字典中求和键
以下代码:
for j in reversed(range(0,15)):
print i
successors = g.successors(totuple(total_nodes[j,:]))
array = [0,0,0,0]
a=0
i = i+1
for succ in successors:
print g.node[succ]
array[a]=g.node[succ]
a+=1
print array
print sum(item['key'] for item in array)
会产生以下输出:
1
{'key': 0.0}
{'key': 0.39730768970355257}
{}
{'key': 0.0}
[{'key': 0.0}, {'key': 0.39730768970355257}, {}, {'key': 0.0}]
- 我不明白为什么有些节点没有键 {}。不过假设我想忽略这些。
- 我想把这些值或者“键”加起来。
所以根据其他问题,我尝试了:
print sum(item['key'] for item in array)结果是:KeyError: 'key'
print sum([i for i in array.values()])结果是:AttributeError: 'list' object has no attribute 'values'
相关问题:
3 个回答
0
你的一些节点是列表或者整数,这就是为什么它们不是字典,所以没有 values() 这个方法,也不能用字符串作为键来索引。
至于你的数据为什么是这样结构的,我们无法告诉你,除非你提供更多的背景信息(比如,g 是什么? successors() 是做什么的? totuple() 又是什么?你实际想解决的问题是什么?)。
2
你可以用 sum(item.get('key', 0) for item in array) 这个写法来计算总和。如果找不到 key,它会返回 0。
3
试着把最后一行改成这样,这样可以避免出现键错误:
sum(item['key'] for item in array if 'key' in item)