在Python中组合多个字典

2024-04-25 04:33:33 发布

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

我有一个12GB的文件,其中每一行都是一个JSON对象,格式如下:

{
    "name": "abc", 
    "val1":500,
    "val2":30, 
    "val3":{
               "topic1":{
                            "val4":["abc","xyz"],
                            "val5":["asdf"]
                        }
           }
}

不幸的是,这是对象结构,无法更改。在

假设这个文件中有另一行:

^{pr2}$

我现在需要合并具有相同名称的对象,以便获得一个形式为的对象:

{
    "name": "abc", 
    "val1":800,
    "val2":40, 
    "val3":{
               "topic1":{
                            "val4":["abc","xyz"],
                            "val5":["asdf"]
                        },
               "topic2":{
                            "val4":["hello","world"],
                            "val5":["test"]
                        }
           }
}

我正在逐行读取文件并加载Python中每行的JSON对象。所以每一行基本上都变成一个Python dict()。然后,我将这个对象存储在MongoDB集合中,如果文件中出现另一个同名的对象,我将更新Mongo记录,以便像上面的示例一样合并它。在

我试图遵循与Integrating multiple dictionaries in python (big data)中相同的方法,但是我使用Mongodb来适应一些值的对象结构。然而,即使对于一个400 MB的示例文件,这也是非常缓慢的。在

有什么方法可以做得更好,也许使用某种并行处理?在


Tags: 文件对象namejson示例结构abcxyz
1条回答
网友
1楼 · 发布于 2024-04-25 04:33:33

这段代码应该有帮助。在

# not tested
import json

mydict = {}
with open(myfile,'r') as infile:
    for line in infile:
        myline = json.loads(line)
        if myline['name'] in mydict:
            mydict[myline['name']]['val1'] += myline['val1']
            mydict[myline['name']]['val2'] += myline['val2']
            mydict[myline['name']]['val3'] += [myline['val3']]
        else:
            mydict[myline['name']] = myline
            mydict[myline['name']]['val3'] = [myline['val3']]

不过,你的问题很模糊,所以这是我对你所要完成的事情的看法。在

编辑:我只是连接字典,但是您可以在.append(myline)发生的部分实现更复杂的合并逻辑。在

相关问题 更多 >