微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决我如何在 python 中将字典附加到 JSON 文件?

我有一个像这样的 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。在“节点”标签中,在“数据”中,我想添加“大小”字段值。

 {'data': [],'name': 'B2','size':10}},'name': 'SCHROEDER PLZ','name': 'D4','size':3}},'name': 'BLAB PLZ','size':3}}],'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"
        }
    },"id": "BLAB PLZ","value": "BLAB PLZ","name": "BLAB PLZ"
        }
    }
]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。