如何解决如何根据匹配的键值对组合字典列表中的 N 个字典?
我想实现以下目标。它本质上是N个字典的组合或合并,从重复的id
中累积所有数据并将来自多个数据源中的所有字典的所有values(except id,updated_date)
附加到最终结果中。
class A:
def __init__(self):
pass
def run(self):
return {"data":[{"id":"ID-2002-0201","updated_at":"2018-05-14T22:25:51Z","html_url":["https://github.com/ID-2002-0201"],"source":"github"},{"id":"ID-2002-0200","updated_at":"2018-05-14T21:49:15Z","html_url":["https://github.com/ID-2002-0200"],{"id":"ID-2002-0348","updated_at":"2018-05-11T14:13:28Z","html_url":["https://github.com/ID-2002-0348"],"source":"github"}]}
class B:
def __init__(self):
pass
def run(self):
return {"data":[{"id":"ID-2002-0201","updated_at":"2006-03-28","html_url":["http://sample.com/files/1622"],"source":"sample"},"updated_at":"2006-06-05","html_url":["http://sample.com/files/1880"],"updated_at":"2007-03-09","html_url":["http://sample.com/files/3441"],"source":"sample"}]}
results = {}
data_sources = [A(),B()]
for data in data_sources:
data_stream = data.run()
for data in data_stream.get('data'):
for key,value in data.items():
if key in ['html_url']:
results.setdefault(key,[]).extend(value)
elif key in ['source']:
results.setdefault(key,[]).append(value)
else:
results[key] = value
print(results)
期望输出
[
{
"id":"ID-2002-0201","html_url":[
"https://github.com/ID-2002-0201","https://github.com/ID-2002-0202","https://github.com/ID-2002-0203","https://github.com/ID-2002-0204"
],"source": [
"github","xxx","22aas"
]
},]
解决方法
我有点困惑,因为您提供的所需输出与您在代码中提供的示例类不匹配。但是,我想我得到了您想要的,如果我对您的问题的解释有误,请纠正我。
我使用你的结果数组就像字典一样。外部字典包含所有唯一的 id 作为键,内部字典包含您想要的输出数据。在循环计算之后,我只返回 list(results.values())
以获得组合的 N 个字典的列表。
代码如下:
class A:
def __init__(self):
pass
def run(self):
return {"data":[{"id":"ID-2002-0201","updated_at":"2018-05-14T22:25:51Z","html_url":["https://github.com/ID-2002-0201"],"source":"github"},{"id":"ID-2002-0200","updated_at":"2018-05-14T21:49:15Z","html_url":["https://github.com/ID-2002-0200"],{"id":"ID-2002-0348","updated_at":"2018-05-11T14:13:28Z","html_url":["https://github.com/ID-2002-0348"],"source":"github"}]}
class B:
def __init__(self):
pass
def run(self):
return {"data":[{"id":"ID-2002-0201","updated_at":"2006-03-28","html_url":["http://sample.com/files/1622"],"source":"sample"},"updated_at":"2006-06-05","html_url":["http://sample.com/files/1880"],"updated_at":"2007-03-09","html_url":["http://sample.com/files/3441"],"source":"sample"}]}
results = {}
data_sources = [A(),B()]
for data in data_sources:
data_stream = data.run()
for data in data_stream.get('data'):
curr_id = data["id"]
result = results.setdefault(curr_id,{})
for key,value in data.items():
if key in ['html_url']:
result.setdefault(key,[]).extend(value)
elif key in ['source']:
result.setdefault(key,[]).append(value)
else:
result[key] = value
print(list(results.values()))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。