Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Networkx添加节点似乎忽略了作为字典解析的属性_Python 3.x_Networkx - Fatal编程技术网

Python 3.x Networkx添加节点似乎忽略了作为字典解析的属性

Python 3.x Networkx添加节点似乎忽略了作为字典解析的属性,python-3.x,networkx,Python 3.x,Networkx,我正在将数据从社交平台API加载到networkx图形中,以进行一些分析。但是有问题。add\u节点函数似乎正在输入I pass,因此没有添加任何属性 来自API的数据 以以下形式出现: data= {'users': [{'1': {'attrib1': 'some value', 'attrib2': 'some other value', .... etc}, '2

我正在将数据从社交平台API加载到networkx图形中,以进行一些分析。但是有问题。
add\u节点
函数似乎正在输入I pass,因此没有添加任何属性

来自API的数据 以以下形式出现:

data= {'users': [{'1': {'attrib1': 'some value',
                        'attrib2': 'some other value',
                     .... etc},
                  '2': {'attrib1': 'some val',
                        'attrib2': 'you get the idea',
                     ... etc},
                ... etc
                 }]}
那就是

dict with one key 'users'
     list with one element [0]
           a dict of each users with user number as the key
                 a dict that contains the same id and a load of other attributes
(结构有点奇怪……)

我已经成功地在
nx.DiGraph
中创建了节点,其中包括:

    G = nx.DiGraph()
    for u in data['users'][0].values():
         G.add_node(str(u['id']),attr_dict=u)
但是当我在
G
(例如
nx.get\u node\u attibutes(G,'firstName')
)中测试节点时,似乎没有任何附加到节点的属性

问题

  • 我做错什么了吗?循环中的
    u
    绝对是一个dict,我已经检查过了
  • 有没有更明智的方法?也许通过将
    数据
    dict操作到不同的结构中

  • 好的,在绝望的时刻,我从
    add\u节点
    调用中删除了关键字参数
    attr\u dict
    。e、 g

    G = nx.DiGraph()
    for u in data['users'][0].values():
         G.add_node(str(u['id']),u)
    
    成功了!我不知道为什么它不喜欢我显式地映射参数。有人知道为什么吗


    我很好奇。

    我猜你在
    attr\u dict
    中输入了一个错误。在您第一次尝试时,它可能已经工作得很好了,您只是“对节点进行了测试”,并不是非常详尽,因此没有意识到您的打字错误是什么

    不要使用
    nx.get_node\u attibutes(G,'firstName')
    ——即检查某个属性是否存在——您可以使用
    G.node
    ,它列出了图形中的所有节点及其属性

    但让我们开门见山吧。关于
    add_node
    的交易是,如果添加一个节点,可以将属性及其值作为关键字参数对传递。以
    add_节点
    文档页面上的代码片段为例:

    G.add_node(3,weight=0.4,UTM=('13S',382871,3972649))
    
    在这里,我们向图中添加一个id为
    3
    的节点,并为其指定一个
    weight
    属性,该属性的值为
    0.4
    ,以及一个
    UTM
    属性,该属性的值为元组。如果我们用
    G.node
    检查它,我们会看到

    >>> G.node
    {3: {'weight': 0.4, 'UTM': ('13S', 382871, 3972649)}}
    
    每个关键字都作为
    键添加到节点的属性dict中!
    一切进展顺利。这与我们将属性作为
    attr\u dict
    传递的结果完全相同:

    >>> G.clear()
    >>> G.add_node(3, attr_dict={'weight': 0.4, 'UTM': ('13S',382871,3972649)})
    >>> G.node
    {3: {'weight': 0.4, 'UTM': ('13S', 382871, 3972649)}}
    
    在你的情况下,我怀疑你在“attr_dict”中打错了。在本例中,networkx认为不是指实际的
    attr\u dict
    关键字,而是指属性名。下面是一个例子:

    >>> G.clear()
    >>> G.add_node(3, attr_dict_typo={'weight': 0.4, 'UTM': ('13S',382871,3972649)})
    >>> G.node
    {3: {'attr_dict_typo': {'weight': 0.4, 'UTM': ('13S', 382871, 3972649)}}}
    
    因此,当您试图检查属性
    'firstname'
    是否与
    nx.get_node\u attibutes(G,'firstname')
    一起存在时,函数查找了一个名为
    'firstname'
    的键,但只找到了
    'attr\u dict\u typo'
    ,并返回了
    None

    如果您有任何问题,请告诉我。

    networkx
    起,
    attr\u dict
    参数在
    .add\u edge()
    add\u edges\u from()方法中不再允许。也许这也被传播到了
    add_node()

    也许您可以尝试使用以下命令添加它们:
    G.add\u节点(1,**attr\u dict)

    另请参见GitHub中的相关问题: