如何对多个Node类实例中neighbour字典的所有值求和?
如何对所有Node类实例的neighbour字典值求和?
我定义了如下的Node类,并且创建了N1到N10多个实例,每个实例的neighbour属性是一个字典。现在我希望把所有这些实例的neighbour字典里的所有值加起来,请问有没有可行的实现方法?
代码定义:
class Node: def __init__(self, name, neighbour): self.neighbour = {} self.name = name self.neighbour = dict(neighbour) N1 = Node('N1', {'N7': 15, 'N6': 5, 'N5': 20, 'N4': 20, 'N2': 10}) N2 = Node('N2', {'N4': 10, 'N3': 5}) # N3 到 N10 的实例定义省略
当然有办法啦!这里有几种简单可行的实现方式,你可以根据自己的场景选择:
方法1:手动收集实例后求和
如果你的Node实例数量不多,或者已经知道所有实例的名字,可以先把它们放到一个列表里,再用嵌套的生成器表达式一次性求和:
# 先把所有Node实例存入列表 nodes = [N1, N2, N3, N4, N5, N6, N7, N8, N9, N10] # 计算所有neighbour字典值的总和 total_sum = sum(value for node in nodes for value in node.neighbour.values()) print(total_sum)
方法2:循环累加(更直观)
如果你觉得生成器表达式有点绕,也可以用两层循环来逐步累加,逻辑更清晰:
nodes = [N1, N2, N3, N4, N5, N6, N7, N8, N9, N10] total_sum = 0 for node in nodes: # 先累加当前节点的neighbour值总和,再加到全局总和里 total_sum += sum(node.neighbour.values()) print(total_sum)
方法3:自动收集所有Node实例
如果你的实例很多,或者是动态创建的,不想手动列出来,可以通过globals()自动收集当前作用域下所有的Node实例:
# 从全局变量中筛选出所有Node类的实例 nodes = [obj for name, obj in globals().items() if isinstance(obj, Node)] # 同样用sum求和 total_sum = sum(value for node in nodes for value in node.neighbour.values()) print(total_sum)
补充说明
- 上面三种方法最终的结果是完全一致的,只是实现方式不同
- 如果你的Node实例是在某个局部作用域里创建的,把
globals()换成locals()即可 - 要注意排除掉可能存在的其他Node类实例(如果有的话),可以根据实例的
name属性再做一次筛选
内容的提问来源于stack exchange,提问作者123ABCd
相关产品推荐
相关产品推荐

