如何使用可选属性调用 networkx.add_node(..)?
How do I call networkx.add_node(..) with optional properties?
我正在遍历从 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个可选属性可以在不同的组合中缺失,像这样的对象有上百个。
我没有发表评论的名声,所以尽管这不是一个完整的答案,我还是照原样发布
您是否尝试过简单地排除 add_node
步骤中缺少的属性?
也就是说,不提供值为 None
的键值对,如果缺少键,则根本不提供 key/value 对。
您可以通过使用 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
我正在遍历从 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个可选属性可以在不同的组合中缺失,像这样的对象有上百个。
我没有发表评论的名声,所以尽管这不是一个完整的答案,我还是照原样发布
您是否尝试过简单地排除 add_node
步骤中缺少的属性?
也就是说,不提供值为 None
的键值对,如果缺少键,则根本不提供 key/value 对。
您可以通过使用 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