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}]}