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