在字典中求和键

3 投票
3 回答
593 浏览
提问于 2025-04-17 20:38

以下代码:

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}]
  1. 我不明白为什么有些节点没有键 {}。不过假设我想忽略这些。
  2. 我想把这些值或者“键”加起来。

所以根据其他问题,我尝试了:

  1. print sum(item['key'] for item in array) 结果是:

    KeyError: 'key'

  2. 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)

撰写回答