微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过将它们与字典进行比较来定义网络节点的属性

如何解决通过将它们与字典进行比较来定义网络节点的属性

我有一个如下所示的 .gml 文件

graph [
  directed 1
  node [
    id 0
    label "5B5F2C071D12AF13219DF5EBE05132AF"
  ]
  node [
    id 1
    label "9FB3B96B6D5E16C9DD564AA3E84F1954"
  ]
  node [
    id 2
    label "B3299B0E587D7275E3E4D530E9EECF50"
  ]
  node [
    id 3
    label "6432F1DF21BA38368D9A165C739EEBB3"
  ]
  node [
    id 4
    label "85D5C50A6D882CA8E4BB00BCA3574417"
  ]
  node [
    id 5
    label "0D8583F810B9720A8032BB939F12B3FF"
  ]
  node [
    id 6
    label "6C10A9E9F325CAA3CCB7F9A0D6983D2A"
  ]
  node [
    id 7
    label "B0C50ED1DEC9E06E4C64E7419DDC4B09"
  ]
]

我需要在网络的每个节点上添加一个名为 class 的属性,它代表一个社会经济分类我有一个字典,包含节点 id 和类,如下:

dict_users = {"5B5F2C071D12AF13219DF5EBE05132AF": 3,"9FB3B96B6D5E16C9DD564AA3E84F1954": 2,"B3299B0E587D7275E3E4D530E9EECF50": 3,"6432F1DF21BA38368D9A165C739EEBB3": 2,"85D5C50A6D882CA8E4BB00BCA3574417": 3,"0D8583F810B9720A8032BB939F12B3FF": 2,"6C10A9E9F325CAA3CCB7F9A0D6983D2A": 3,"B0C50ED1DEC9E06E4C64E7419DDC4B09": 2}

但是,当我通过字典遍历网络时,所有节点都会收到字典中最后一个的值。完整代码如下:

import pandas as pd
import networkx as nx
G = nx.read_gml('/home/gustavo/Desktop/MesTrado/mesTrado_dados/Redes/Teste.gml')

dict_users = {"5B5F2C071D12AF13219DF5EBE05132AF": 3,"B0C50ED1DEC9E06E4C64E7419DDC4B09": 3}

for i in G.nodes:
    for j in dict_users.keys():
        if i == j:
            nx.set_node_attributes(G,dict_users.get(j),'class')

谁能告诉我我应该怎么做才能让每个节点都像字典中那样接收与其对应的值?另外,有什么方法可以降低网络和字典之间的迭代计算成本吗?真正的 .gml 文件要大得多,字典也是。

解决方法

我找到了一个答案,但它的计算成本仍然非常高:

import pandas as pd
import networkx as nx
G = nx.read_gml('/home/gustavo/Desktop/Mestrado/mestrado_dados/Redes/Teste.gml')

dict_users = {"5B5F2C071D12AF13219DF5EBE05132AF": 3,"9FB3B96B6D5E16C9DD564AA3E84F1954": 2,"B3299B0E587D7275E3E4D530E9EECF50": 3,"6432F1DF21BA38368D9A165C739EEBB3": 2,"85D5C50A6D882CA8E4BB00BCA3574417": 3,"0D8583F810B9720A8032BB939F12B3FF": 2,"6C10A9E9F325CAA3CCB7F9A0D6983D2A": 3,"B0C50ED1DEC9E06E4C64E7419DDC4B09": 3}

for i in G.nodes:
    for j in dict_users.keys():
        if i == j:
            G.nodes[i]['class'] = dict_users.get(j)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。