如何将字典附加到 python 中的 JSON 文件?

How do i append a dictionary to a JSON file in python?

我有一个 JSON 看起来像这样:

{'data': [], 'directed': False, 'multigraph': False, 'elements': {'nodes': [{'data': {'id': 'B2', 'value': 'B2', 'name': 'B2'}}, {'data': {'id': 'SCHROEDER PLZ', 'value': 'SCHROEDER PLZ', 'name': 'SCHROEDER PLZ'}}, {'data': {'id': 'D4', 'value': 'D4', 'name': 'D4'}}, {'data': {'id': 'BLAB PLZ', 'value': 'BLAB PLZ', 'name': 'BLAB PLZ'}}], 'edges': [{'data': {'source': 'B2', 'target': 'SCHROEDER PLZ'}}, {'data': {'source': 'D4', 'target': 'BLAB PLZ'}}]}}

JSON 是我代码中“加载”的结果:

import pandas as pd
import networkx as nx
import json

df= pd.read_csv('.../graph.csv')
g = nx.from_pandas_edgelist(df, source='DISTRICT', target='STREET')
x = nx.cytoscape_data(g)
dump = json.dumps(x)
loads = json.loads(dump)

这是我的 csv 文件结构:第一条记录是字段名称。

OFFENSE_DESCRIPTION,DISTRICT,DAY_OF_WEEK,STREET,INCIDENT_NUMBER,size
INVESTIGATE PERSON,B2,Thursday,SCHROEDER PLZ,854652314,10
INVESTIGATE PERSON,D4,Friday,BLAB PLZ,457856954,3

我想附加位于我的 csv 文件中的“大小”值。

其实结果一定是下面这样JSON。在 'nodes' 标签中,在 'data' 我想添加 'size' 字段值。

 {'data': [], 'directed': False, 'multigraph': False, 'elements': {'nodes': [{'data': {'id': 'B2', 'value': 'B2', 'name': 'B2','size':10}}, {'data': {'id': 'SCHROEDER PLZ', 'value': 'SCHROEDER PLZ', 'name': 'SCHROEDER PLZ','size':10}}, {'data': {'id': 'D4', 'value': 'D4', 'name': 'D4','size':3}}, {'data': {'id': 'BLAB PLZ', 'value': 'BLAB PLZ', 'name': 'BLAB PLZ','size':3}}], 'edges': [{'data': {'source': 'B2', 'target': 'SCHROEDER PLZ'}}, {'data': {'source': 'D4', 'target': 'BLAB PLZ'}}]}}

一个优雅的解决方案是更新 networkx 中的节点属性而不是输出字典。使用 nx.set_node_attributes:

df = pd.read_csv('.../graph.csv')
size = dict(df[['DISTRICT', 'size']].values.tolist()
            + df[['STREET', 'size']].values.tolist())

g = nx.from_pandas_edgelist(df, source='DISTRICT', target='STREET')
nx.set_node_attributes(g, size, 'size')
x = nx.cytoscape_data(g)
>>> print(json.dumps(x['elements']['nodes'], indent=4))
[
    {
        "data": {
            "size": 10,
            "id": "B2",
            "value": "B2",
            "name": "B2"
        }
    },
    {
        "data": {
            "size": 10,
            "id": "SCHROEDER PLZ",
            "value": "SCHROEDER PLZ",
            "name": "SCHROEDER PLZ"
        }
    },
    {
        "data": {
            "size": 3,
            "id": "D4",
            "value": "D4",
            "name": "D4"
        }
    },
    {
        "data": {
            "size": 3,
            "id": "BLAB PLZ",
            "value": "BLAB PLZ",
            "name": "BLAB PLZ"
        }
    }
]