【问题标题】:summing up values in dictionary总结字典中的值
【发布时间】:2018-11-28 12:22:52
【问题描述】:

我正在使用 networkX,它是 python 中基于图形的库。我在这里截断了数据,因为它只是一个字典列表。

我想总结图表中三角形的数量。

import networkx as nx
for i in graphT:
    print(nx.triangles(i))

这会生成

{0: 1, 1: 0, 2: 0, 3: 1, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 1, 11: 0, 12: 2, 13: 0, 14: 2, 15: 1, 16: 1, 17: 0, 18: 0, 19: 1, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 5, 26: 1, 27: 0, 28: 0, 29: 1, 30: 0, 31: 0, 32: 0, 33: 4, 34: 1, 35: 3, 36: 1, 37: 1, 38: 2, 39: 1}
{0: 1, 1: 0, 2: 0, 3: 1, 4: 2, 5: 0, 6: 0, 7: 0, 8: 0, 9: 2, 10: 2, 11: 0, 12: 2, 13: 2, 14: 3, 15: 2, 16: 1, 17: 0, 18: 1, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 2, 26: 2, 27: 0, 28: 0, 29: 1, 30: 0, 31: 0, 32: 0, 33: 2, 34: 0, 35: 2, 36: 1, 37: 1, 38: 1, 39: 2}
{0: 1, 1: 1, 2: 0, 3: 2, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 2, 11: 0, 12: 4, 13: 0, 14: 3, 15: 4, 16: 1, 17: 1, 18: 0, 19: 0, 20: 0, 21: 0, 22: 1, 23: 0, 24: 0, 25: 3, 26: 2, 27: 0, 28: 0, 29: 1, 30: 0, 31: 0, 32: 0, 33: 1, 34: 1, 35: 2, 36: 1, 37: 1, 38: 2, 39: 2}

......

现在,我想对这些值求和

为哪个

for i in graphT:
    #print(nx.triangles(i))
    for k, v in nx.triangles(i).items():
        #print(i.number_of_edges(), v)
        #print(jt.append(v))
        vi= v
        print(k, vi)
        break

为键 '0' 生成元组。我在这里用 break 语句截断了数据。

(0, 1)
(0, 1)
(0, 1)
(0, 1)
(0, 1)
(0, 1)
(0, 1)
(0, 5)
(0, 2)
(0, 4)
(0, 3)
(0, 5)
(0, 2)
(0, 3)
(0, 4)
(0, 1)
(0, 4)
(0, 1)
(0, 8)
(0, 5)
(0, 2)
(0, 4)
(0, 3)
(0, 5)
(0, 6)
(0, 3)
(0, 3)
(0, 11)
(0, 7)
(0, 18)
(0, 9)
(0, 8)
(0, 4)
(0, 12)
(0, 22)
(0, 14)
(0, 23)
(0, 18)
(0, 2)
(0, 41)
(0, 8)
(0, 29)
(0, 13)
(0, 12)
(0, 53)
(0, 12)

我将如何总结这个作为第二个元素的元组的值?如果我使用sum(v)sum(vi),我会得到TypeError: 'int' object is not iterable

这给了我解决方案:

j= [(sum(n for _, n in nx.triangles(i).items()), i.number_of_edges()) for i in graphT]

【问题讨论】:

  • 您能否澄清一点:您是专门为求和生成元组,还是出于其他目的需要这些元组?
  • 稍后我将不得不使用总和来寻找概率。
  • 我知道您需要总和,但我想问的是您是否真的需要打印所有 (k, v) 元组,或者您是否只关心 v 上的总和
  • nx.triangles(i).items() 是一本字典。我需要总结这本字典中的值。那就是我卡住的地方。在每个图“i”上说出 v 的总和
  • 我也需要钥匙

标签: numpy dictionary tuples networkx


【解决方案1】:

您可以使用values 访问字典的所有值。然后总结这些。所以对于这种情况:

import networkx as nx
G = nx.fast_gnp_random_graph(1000,0.05)
triangle_counts = nx.triangles(G)
triangle_sum = sum(triangle_counts.values())
number_of_triangles = triangle_sum/3
print(number_of_triangles)
> 20444.0

请注意,每个三角形每个节点计算一次,所以我除以 3。

【讨论】:

  • 谢谢乔尔。这是我最终做的事情: j= [(sum(n for _, n in nx.triangles(i).items()), i.number_of_edges()) for i in graphT] 从中获得所有必需的值对于三角形和边。实际上试图实施 ERGM。如果您对临时级别的实现有所了解,我将不胜感激。
  • 副手 我不知道有谁在networkx中设置了ERGM包。我一直希望有人会。我的知识还不足以让我觉得这样做很舒服,但也许我会在将来的某个时候尝试一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-19
  • 1970-01-01
  • 1970-01-01
  • 2012-07-26
  • 1970-01-01
  • 2020-04-08
相关资源
最近更新 更多