【问题标题】:How can I create a graph node with additional attributes using a dictionary如何使用字典创建具有附加属性的图形节点
【发布时间】:2020-01-07 13:20:52
【问题描述】:

尝试创建这样的图表:

import networkx as nx
from datetime import datetime

#create undirected graph g
g = nx.Graph()
#add nodes
g.add_node("John", {"name":"John", "age":25})
g.add_node("Peter", {'name': 'Peter', 'age':35})
g.add_node("Mary", {'name': 'Mary', 'age':31})
g.add_node("Lucy", {'name': 'Lucy', 'age':19})
#add edges
g.add_edge("John", "Mary", {'Since': datetime.today()})
g.add_edge("John", "Peter", {'Since': datetime(1990, 7, 30)})
g.add_edge("John", "Mary", {'Since': datetime(2010,8, 10)})

print(g.nodes())
print(g.edges())
print(g.has_edge("Lucy", "Mary"))

错误TypeError: add_node() takes 2 positional arguments but 3 were given

知道如何解决这个问题吗?

【问题讨论】:

    标签: python dictionary anaconda networkx graph-theory


    【解决方案1】:

    这可以通过在属性字典前面加上** 来完成。有关详细信息,请参阅文档here

    import networkx as nx
    from datetime import datetime
    
    #create undirected graph g
    g = nx.Graph()
    #add nodes
    g.add_node("John", **{"name":"John", "age":25})
    g.add_node("Peter", **{'name': 'Peter', 'age':35})
    g.add_node("Mary", **{'name': 'Mary', 'age':31})
    g.add_node("Lucy", **{'name': 'Lucy', 'age':19})
    #add edges
    g.add_edge("John", "Mary", **{'Since': datetime.today()})
    g.add_edge("John", "Peter", **{'Since': datetime(1990, 7, 30)})
    g.add_edge("John", "Mary", **{'Since': datetime(2010,8, 10)})
    
    print(g.nodes())
    print(g.edges())
    print(g.has_edge("Lucy", "Mary"))
    

    输出:

    ['John', 'Peter', 'Mary', 'Lucy']
    [('John', 'Mary'), ('John', 'Peter')]
    False
    >>> g.nodes['John']
    {'name': 'John', 'age': 25}
    

    【讨论】:

    • g.add_node("John", name="John", age=25) 反而会更干净 imo
    猜你喜欢
    • 2022-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多