【问题标题】:Giving attributes to nodes of a generated graph为生成图的节点赋予属性
【发布时间】:2020-05-05 14:47:39
【问题描述】:

我是 Python 和 NetworkX 的新手,我正在尝试将字典中的属性提供给使用图形生成器创建的网络节点。这是我的示例代码:

g = nx.watts_strogatz_graph(5,4,0.1)

name_dict = {
  0: "Alice",
  1: "Bob",
  2: "Carl",
  3: "Diana",
  4: "Elain",
}

nx.set_node_attributes(g, name, name_dict)

但是我收到以下错误:

    nx.set_node_attributes(g, name, name_dict)
NameError: name 'name' is not defined

如何定义从字典中给出值的属性名称('name')?

【问题讨论】:

    标签: python networkx graph-theory


    【解决方案1】:

    NameError:名称“名称”未定义

    您收到此错误是因为您没有名为 name 的变量。

    让我们看看我通过谷歌搜索“networkx set_node_attributes”找到的the documentation

    set_node_attributes(G, values, name=None)[来源]

    根据给定值或值字典设置节点属性。

    警告

    参数值和名称的调用顺序在v1.x和v2.x之间切换。

    参数

    G(NetworkX 图)

    values (scalar value, dict-like) – 节点属性应该设置为什么。如果 values 不是字典,则将其视为单个属性值,然后将其应用于 G 中的每个节点。这意味着如果您提供可变对象(如列表),则对该对象的更新将反映在节点中每个节点的属性。属性名称将是 name。

    如果 values 是 dict 或 dict 的 dict,则应按节点将其键控为属性值或用于更新节点属性的属性键/值对的 dict。

    name (string (optional, default=None)) – 如果值是标量,则要设置的节点属性的名称。

    这告诉我们字典必须是要传入的第二个参数,而不是您拥有的第三个参数。

    它还告诉我们name 参数是一个可选字符串。

    将所有这些放在一起,您可以通过执行以下操作来修复您的代码:

    nx.set_node_attributes(g, name_dict)
    

    这将运行,但它忽略了属性的名称。如果您希望属性具有名称'name',则可以传递一个字符串作为第三个参数:

    nx.set_node_attributes(g, name_dict, 'name')
    

    TLDR;您需要修正参数的顺序,并将 'name' 用引号括起来,使其成为字符串而不是变量。

    【讨论】:

      猜你喜欢
      • 2020-11-11
      • 1970-01-01
      • 1970-01-01
      • 2012-11-13
      • 1970-01-01
      • 2015-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多