如果键值相同,则在python对象中添加列表

如果键值相同,则在python对象中添加列表,python,Python,我有一个json文件,其中包含不同的objectID和每个对象中的结果列表。我只想保留一个具有相同id的对象,并将另一个对象的结果添加到一个对象上。 问题是如何合并/连接具有相同ID的(?)对象,使其仅具有on但具有所有结果(在我的示例中列出)? 我的意见: [{ 'objectID': 10745, 'date': 'april 2020', 'results': [{ 'model': 'AUDI - TT QUATTRO', 'pri

我有一个json文件,其中包含不同的objectID和每个对象中的结果列表。我只想保留一个具有相同id的对象,并将另一个对象的结果添加到一个对象上。
问题是如何合并/连接具有相同ID的(?)对象,使其仅具有on但具有所有结果(在我的示例中列出)? 我的意见:

[{
    'objectID': 10745,
    'date': 'april 2020',
    'results': [{
        'model': 'AUDI - TT QUATTRO',
        'price_str': '4 800 EUR'
    }]
}, {
    'objectID': 10745,
    'results': [{
        'model': 'Porsche 911',
        'price_str': '48 000 EUR'
    }]
}]
预期产出:

[{
    'objectID': 10745,
    'results': [{
        'model': 'AUDI - TT QUATTRO',
        'price_str': '4 800 EUR'
    },
  {
        'model': 'Porsche 911',
        'price_str': '48 000 EUR'
    }]
}]
我的代码:

for item in data:
    objectId = item["objectID"]
    results = item["results"]

    def removeDuplicate():
        new_results = [d for i, d in enumerate(data) if d['objectID'] not in set(
            map(lambda x:x['objectID'], data[:i])) or d['results']]
        data[:] = new_results
    removeDuplicate()

实际上,它可以是5个相同的对象,具有相同的
objectID
,而不仅仅是一个,但对于这个例子来说,

目前我能想到的最简单的方法就是操作一个字典,因为我们可以使用唯一的键(在本例中为objectID)进行搜索。如果密钥不存在,那么我们还没有找到具有此objectID的对象,我们可以安全地将其插入该密钥。否则,我们会将新找到的项的结果附加到已经在该键上的项。然后我们只获取dict的值列表,因为这将删除objectID作为键的任何痕迹

数据=[{
“objectID”:10745,
“日期”:2020年4月,
“结果”:[{
‘车型’:‘奥迪-TT QUATTRO’,
“价格:4800欧元”
}]
}, {
“objectID”:10745,
“结果”:[{
“车型”:“保时捷911”,
“价格”:48000欧元
}]
}]
新_数据={}
对于数据中的项目:
如果新_数据中的项目['objectID']:
新的_数据[item['objectID']['results']+=item['results']
其他:
新的_数据[item['objectID']={'objectID':item['objectID'],'results':item['results']}
打印(列表(新数据.values())

如果有更快或更优雅的解决方案,我洗耳恭听

目前我能想到的最简单的方法是操作字典,因为我们可以使用唯一键(在本例中为objectID)进行搜索。如果密钥不存在,那么我们还没有找到具有此objectID的对象,我们可以安全地将其插入该密钥。否则,我们会将新找到的项的结果附加到已经在该键上的项。然后我们只获取dict的值列表,因为这将删除objectID作为键的任何痕迹

数据=[{
“objectID”:10745,
“日期”:2020年4月,
“结果”:[{
‘车型’:‘奥迪-TT QUATTRO’,
“价格:4800欧元”
}]
}, {
“objectID”:10745,
“结果”:[{
“车型”:“保时捷911”,
“价格”:48000欧元
}]
}]
新_数据={}
对于数据中的项目:
如果新_数据中的项目['objectID']:
新的_数据[item['objectID']['results']+=item['results']
其他:
新的_数据[item['objectID']={'objectID':item['objectID'],'results':item['results']}
打印(列表(新数据.values())

如果有更快或更优雅的解决方案,我洗耳恭听

您可以使用一个临时默认dict。这将需要1次传递您的输入arr以创建中间dict。另一次传递dict以创建输出列表


>>> input_arr=[{
...     'objectID': 10745,
...     'date': 'april 2020',
...     'results': [{
...         'model': 'AUDI - TT QUATTRO',
...         'price_str': '4 800 EUR'
...     }]
... }, {
...     'objectID': 10745,
...     'results': [{
...         'model': 'Porsche 911',
...         'price_str': '48 000 EUR'
...     }]
... }]
>>> 
>>> from collections import defaultdict as dd
>>> temp_dict=dd(list)
>>> for d in input_arr:
...  temp_dict[d['objectID']].extend(d['results'])
... 
>>> temp_dict
defaultdict(<class 'list'>, {10745: [{'model': 'AUDI - TT QUATTRO', 'price_str': '4 800 EUR'}, {'model': 'Porsche 911', 'price_str': '48 000 EUR'}]})
>>> out_arr=[]
>>> for k,v in temp_dict.items():
...  out_arr.append({'objectID':k, 'results':v})
... 
>>> out_arr
[{'objectID': 10745, 'results': [{'model': 'AUDI - TT QUATTRO', 'price_str': '4 800 EUR'}, {'model': 'Porsche 911', 'price_str': '48 000 EUR'}]}]



>>>输入_arr=[{
…“objectID”:10745,
…“日期”:2020年4月,
…“结果”:[{
“…”车型“:”奥迪-TT QUATTRO“,
…价格:4800欧元
...     }]
... }, {
…“objectID”:10745,
…“结果”:[{
…“车型”:“保时捷911”,
…价格:48000欧元
...     }]
... }]
>>> 
>>>从集合导入defaultdict作为dd
>>>温度dict=dd(列表)
>>>对于输入_arr中的d:
...  临时命令[d['objectID']]。扩展(d['results'])
... 
>>>临时命令
defaultdict({10745:[{'model':'AUDI-TT QUATTRO','price_str':'4800欧元'},{'model':'Porsche 911','price_str':'48000欧元'})
>>>out_arr=[]
>>>对于临时目录项()中的k,v:
...  out_arr.append({'objectID':k,'results':v})
... 
>>>外线
[{'objectID':10745,'结果':[{'model':'AUDI-TT QUATTRO','price_str':'4800欧元'},{'model':'Porsche 911','price_str':'48000欧元'}]

您可以使用临时默认dict。这将需要1次传递输入arr以创建中间dict。另一次传递dict以创建输出列表


>>> input_arr=[{
...     'objectID': 10745,
...     'date': 'april 2020',
...     'results': [{
...         'model': 'AUDI - TT QUATTRO',
...         'price_str': '4 800 EUR'
...     }]
... }, {
...     'objectID': 10745,
...     'results': [{
...         'model': 'Porsche 911',
...         'price_str': '48 000 EUR'
...     }]
... }]
>>> 
>>> from collections import defaultdict as dd
>>> temp_dict=dd(list)
>>> for d in input_arr:
...  temp_dict[d['objectID']].extend(d['results'])
... 
>>> temp_dict
defaultdict(<class 'list'>, {10745: [{'model': 'AUDI - TT QUATTRO', 'price_str': '4 800 EUR'}, {'model': 'Porsche 911', 'price_str': '48 000 EUR'}]})
>>> out_arr=[]
>>> for k,v in temp_dict.items():
...  out_arr.append({'objectID':k, 'results':v})
... 
>>> out_arr
[{'objectID': 10745, 'results': [{'model': 'AUDI - TT QUATTRO', 'price_str': '4 800 EUR'}, {'model': 'Porsche 911', 'price_str': '48 000 EUR'}]}]



>>>输入_arr=[{
…“objectID”:10745,
…“日期”:2020年4月,
…“结果”:[{
“…”车型“:”奥迪-TT QUATTRO“,
…价格:4800欧元
...     }]
... }, {
…“objectID”:10745,
…“结果”:[{
…“车型”:“保时捷911”,
…价格:48000欧元
...     }]
... }]
>>> 
>>>从集合导入defaultdict作为dd
>>>温度dict=dd(列表)
>>>对于输入_arr中的d:
...  临时命令[d['objectID']]。扩展(d['results'])
... 
>>>临时命令
defaultdict({10745:[{'model':'AUDI-TT QUATTRO','price_str':'4800欧元'},{'model':'Porsche 911','price_str':'48000欧元'})
>>>out_arr=[]
>>>对于临时目录项()中的k,v:
...  out_arr.append({'objectID':k,'results':v})
... 
>>>外线
[{'objectID':10745,'结果':[{'model':'AUDI-TT QUATTRO','price_str':'4800欧元'},{'model':'Porsche 911','price_str':'48000欧元'}]

这里的问题到底是什么?您正在寻找代码方面的帮助吗?问题是如何合并/连接(?)具有相同ID的对象,使其仅启用,但具有所有结果(在我的示例中列出)?这里的问题到底是什么?您正在寻找代码方面的帮助吗?问题是如何合并/连接具有相同ID的(?)对象,使其仅启用但具有所有结果(在我的示例中列出)?