Python中如何将多个独立字典合并为单个字典?
问题:合并API返回的司机姓名与车辆ID为单一字典
我试图在Python中从API返回结果创建一个新字典,目的是获取司机姓名列表,并将其与API服务自带的车辆ID配对。当前代码如下:
url = url headers = { "accept": "application/json", "authorization": auth } response = requests.get(url, headers=headers) response = response.json() for doc in response['data']: try: doc['id'], doc['staticAssignedDriver']['name'] except: pass else: names = { doc['staticAssignedDriver']['name']: doc['id'] } names.update(names) print(type(names)) print(names)
这段代码会打印出多个独立的姓名-ID字典,例如:
{'name1':'id1'} <class 'dict'> {'name2':'id2'} <class 'dict'>
我希望将这些合并为一个单一字典,格式如下:
{'name1': 'id1', 'name2': 'id2'}
目前每次循环生成的姓名/ID对都会成为独立的names变量,请问如何将它们合并为一个单一字典?
解决方案
你需要在循环外部初始化一个空字典,然后在循环内部将每个姓名-ID对添加到这个字典中,而不是每次循环都重新创建新的字典。同时要避免无差别捕获异常(这会隐藏其他潜在错误),以及去掉无效的names.update(names)操作(这只是将字典和自身合并,没有实际作用)。
修改后的完整代码:
import requests # 确保导入requests库 url = url headers = { "accept": "application/json", "authorization": auth } response = requests.get(url, headers=headers) response_data = response.json() # 循环外初始化空字典 driver_vehicle_map = {} for doc in response_data['data']: try: # 先提取所需值,确保键存在 vehicle_id = doc['id'] driver_name = doc['staticAssignedDriver']['name'] except KeyError: # 仅捕获键不存在的情况,避免隐藏其他异常 continue # 将键值对添加到字典中 driver_vehicle_map[driver_name] = vehicle_id # 打印最终合并后的字典 print(driver_vehicle_map)
关键修改说明:
- 提前初始化字典:
driver_vehicle_map = {}放在循环外面,确保整个循环都在同一个字典中添加数据。 - 直接赋值添加键值对:每次循环中用
driver_vehicle_map[driver_name] = vehicle_id将新的配对添加到字典,自动合并。 - 更精准的异常捕获:把
except:改为except KeyError:,只处理id或staticAssignedDriver['name']不存在的情况,不会忽略其他错误(比如API返回格式错误)。 - 移除无效操作:删掉
names.update(names),这个操作没有意义,不会帮你合并数据。
运行修改后的代码,就能得到一个包含所有司机姓名与对应车辆ID的单一字典。
内容的提问来源于stack exchange,提问作者Kouu_Tori
相关产品推荐
相关产品推荐

