Python 合并两个索引不同的词典
我要合并此词典:Python 合并两个索引不同的词典,python,json,dictionary,Python,Json,Dictionary,我要合并此词典: b = {data:[{station_id: 7000, name: "Ft. York / Capreol Crt." }, {station_id: 7001, name: "Lower Jarvis St / The Esplanade"} ]} 还有这个: c = {data:[{station_id: 7000, num_bikes_available: 18, }, {station_id: 7001, num_bikes_availabl
b = {data:[{station_id: 7000,
name: "Ft. York / Capreol Crt."
},
{station_id: 7001,
name: "Lower Jarvis St / The Esplanade"}
]}
还有这个:
c = {data:[{station_id: 7000,
num_bikes_available: 18,
},
{station_id: 7001,
num_bikes_available: 4,
},
{station_id: 7002,
num_bikes_available: 10}
]}
然后买一本这样的字典:
d = {data:[{station_id: 7000,
name: "Ft. York / Capreol Crt.",
num_bikes_available: 18
},
{station_id: 7001,
name: "Lower Jarvis St / The Esplanade",
num_bikes_available: 4},
{station_id: 7002,
num_bikes_available: 10}
]}
我该怎么做?请记住,在c中我们有一个站点,id=7002,而在b中我们没有。我希望这有帮助
dct = {'a':'b','b':'c'}
dct1 = {'a':'b','d':'c'}
ndict = dict(dct.items() + dct1.items())
print ndict
控制台输出:
{'a': 'b', 'b': 'c', 'd': 'c'}
首先,您可以从
b
创建一个临时字典开始,以便于查找
In [812]: temp = { x['station_id'] : x for x in b['data'] }
接下来,迭代c
并更新b
中存在的词典:
In [813]: d = c.copy()
In [814]: for _dict in d['data']:
...: if _dict['station_id'] in temp:
...: _dict.update(temp[_dict['station_id']])
...:
In [815]: d
Out[815]:
{'data': [{'name': 'Ft. York / Capreol Crt.',
'num_bikes_available': 18,
'station_id': 7000},
{'name': 'Lower Jarvis St / The Esplanade',
'num_bikes_available': 4,
'station_id': 7001},
{'num_bikes_available': 10,
'station_id': 7002}]}
我们可以将每个“数据”目录列表解包成一个目录列表,以便于合并内部目录的内容,然后我们可以从合并的数据中以原始格式创建一个新的目录列表。在合并过程中,如果c
有一个在b
中不存在的dict,我们使用.setdefault
创建一个空dict。新列表按站点id
排序
from pprint import pprint
b = {'data': [{'name': 'Ft. York / Capreol Crt.', 'station_id': 7000},
{'name': 'Lower Jarvis St / The Esplanade', 'station_id': 7001}]}
c = {'data': [{'num_bikes_available': 18, 'station_id': 7000},
{'num_bikes_available': 4, 'station_id': 7001},
{'num_bikes_available': 10, 'station_id': 7002}]}
def unpack(old):
return {d["station_id"]: d.copy() for d in old['data']}
temp = unpack(b)
for k, v in unpack(c).items():
temp.setdefault(k, {}).update(v)
# repack
d = {"data": [temp[k] for k in sorted(temp.keys())]}
pprint(d)
输出
{'data': [{'name': 'Ft. York / Capreol Crt.',
'num_bikes_available': 18,
'station_id': 7000},
{'name': 'Lower Jarvis St / The Esplanade',
'num_bikes_available': 4,
'station_id': 7001},
{'num_bikes_available': 10, 'station_id': 7002}]}
此代码可以轻松修改以处理2个以上的输入对象。请注意,合并过程不会更改原始对象。我尝试了“在Python中合并两个词典”的代码,但它给出了此错误“z.update(c1[station_id])keyror:7002”您应该给出您在问题描述中尝试过的代码,这些键是
数据,station_id
,名称,num\u bikes\u available
应该是字符串吗?您只能接受一个答案。与Highlander一样,只有一个:)@kia如果答案有帮助,您可以通过单击我的答案旁边的灰色勾号来标记接受。这很有帮助。谢谢
{'data': [{'name': 'Ft. York / Capreol Crt.',
'num_bikes_available': 18,
'station_id': 7000},
{'name': 'Lower Jarvis St / The Esplanade',
'num_bikes_available': 4,
'station_id': 7001},
{'num_bikes_available': 10, 'station_id': 7002}]}