在字典中添加子列表的值

adding values of sub lists inside dictionary

编译上述单元格后,您应该能够编译以下单元格并获得所需的输出。

这应该return36.

基本上它添加了A、B、C、D的边权重。有些边被列出了两次,如果已经考虑过,我们不应该为那些边添加权重。例如 [A,B] 和 [B,A] 因为它们是同一条边等

这是我目前无法开始工作的代码:

def infty(graph):
  sum = 0
  results = []
  for a in graph:
    for a in a:
      results.append(graph[a])
      sum = sum + results[a]
  print (sum)

如果图形是对称的并且其描述完整且一致(即对于每个权重 w_ab 都有一个相等的 w_ba):

def infty(g):
    return 1 + sum([e[1] for lst in g.values() for e in lst]) / 2

示例:

g = {'A': [['B', 10], ['D', 5]], 'B': [['A', 10], ['C', 5]],
     'C': [['B', 5], ['D', 15]], 'D': [['C', 15], ['A', 5]]}

>>> infty(g)
36.0

说明

  • sum([e[1] for lst in g.values() for e in lst]) 只是一个双列表推导(一个有两个 for 循环的列表推导);
  • 第一个 for 循环:for lst in g.values() 遍历 g 的值(即 dict),例如:[['B', 10], ['D', 5]],然后是 [['A', 10], ['C', 5]]等);
  • 第二个 for 循环:for e in lst 迭代每个列表中的每个元素 lst,例如['B', 10]['D', 5]
  • using e[1]指每条边的权重

Pierre 的回答更优雅,但与您的第一个功能类似,这似乎对我有用:

def infty(graph):
    sum_ = 0
    for node in graph:
        for node_2 in graph[node]:
            sum_ += node_2[1]
    return (sum_)/2 +1

如您的示例所示,graph 是一本字典。节点被计算两次,这就是 sum_ 除以 2 的原因。这仅适用于无向图的情况。