如何使用可选属性调用networkx.add_node(..)?

2024-04-29 14:11:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我循环浏览由JSON构建的对象字典,并使用networkx从中创建顶点。我遇到的问题是,一些JSON对象缺少属性,如果这样做:

self.graph.add_node(valueToCheck, 
                id=self.vertexDict[valueToCheck], 
                namespace=component["namespace"], 
                tenant=component["tenant"], 
                type=component.get("type")+"Component",
                artifactFileName=component.get("artifactFileName"),
                className=component.get("className"),
                userConfig=component.get("userConfig"),
                sourceType=component.get("sourceType"),
                sinkType=component.get("sinkType"))

然后我无法使用nx.write_graphml(..)导出图形,因为某些顶点属性具有值None(当属性丢失时,这是component.get(..)的预期输出)

当JSON对象中缺少某些属性时,如何使用networkx构造顶点

我的JSON看起来是这样的:

[{'type': 'function',
  'namespace': 'campaigns',
  'name': 'campaign-record-transformer',
  'tenant': 'osp',
  'artifactFileName': 'osp-functions-1.1-SNAPSHOT-jar-with-dependencies.jar',
  'className': 'com.overstock.dataeng.pulsar.functions.CampaignRecordTransformer',
  'inputs': ['persistent://osp/campaigns/campaign-manager'],
  'logTopic': 'persistent://osp/logging/pulsar-log-topic',
  'output': 'persistent://osp/campaigns/campaign-records'},
 {'type': 'function',
  'namespace': 'campaignsTest',
  'name': 'campaign-metadata-transformer',
  'tenant': 'osp',
  'artifactFileName': 'osp-functions-1.1-SNAPSHOT-jar-with-dependencies.jar',
  'className': 'com.overstock.dataeng.pulsar.functions.CampaignMetadataTransformer',
  'logTopic': 'persistent://osp/logging/pulsar-log-topic',
  'output': 'persistent://osp/campaigns/campaign-metadata-output'}]

请注意,第二个对象缺少inputs属性。在实际数据中,至少有8个可选属性在不同的组合中可能会丢失,并且有数百个这样的对象


Tags: 对象jsonget属性typefunctionsnamespacepersistent
1条回答
网友
1楼 · 发布于 2024-04-29 14:11:54

我没有评论的名声,所以尽管这不是一个完整的答案,我还是把它作为一个

您是否尝试过简单地排除add_node步骤中缺少的属性

也就是说,不提供值为None的键值对,如果缺少键值,则根本不提供键值对

通过使用python加载json,然后解压组件,您可能很容易实现这一点:

components = json.load(...)
for component in components:
    self.graph.add_node(value, **component)

https://docs.python.org/3/tutorial/controlflow.html#unpacking-argument-lists

相关问题 更多 >