汇总字典中的值

时间:2018-11-28 12:22:52

标签: numpy dictionary tuples networkx

我正在使用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]

1 个答案:

答案 0 :(得分: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。

相关问题