Python合并字典列表仅最后一个生效问题及JSON转字典方法咨询
问题分析与解决方案
1. 循环合并字典后只剩最后一个的原因
你使用new_dcit.update(i)时,update()方法会将字典i的键值对合并到new_dcit中,如果存在重复键,新值会直接覆盖旧值。而你请求返回的用户列表里,每个用户字典都包含id、name、email这类重复键,每一次循环都会覆盖之前的键值对,最终自然只剩最后一个用户的字典内容。
正确的合并方式
根据实际需求,有两种常用处理方案:
- 用唯一标识作为外层键:比如以用户的
id为键,将整个用户字典作为值存储,避免键冲突:
import requests my_request = requests.get("https://jsonplaceholder.typicode.com/users") request_parse = my_request.json() new_dict = {} for user in request_parse: new_dict[user['id']] = user # 用id作为唯一键区分不同用户 for key, val in new_dict.items(): print(key, " : ", val)
- 收集相同键的所有值为列表:如果需要把所有用户的同类型数据汇总到一起,比如将所有用户名存到
name键对应的列表中:
import requests from collections import defaultdict my_request = requests.get("https://jsonplaceholder.typicode.com/users") request_parse = my_request.json() new_dict = defaultdict(list) for user in request_parse: for k, v in user.items(): new_dict[k].append(v) for key, val in new_dict.items(): print(key, " : ", val)
2. JSON对象转Python字典的其他方法
除了requests库自带的response.json()方法,还有以下两种常见方式:
- 使用标准库
json的loads()方法:直接解析响应的文本内容:
import json import requests my_request = requests.get("https://jsonplaceholder.typicode.com/users") request_parse = json.loads(my_request.text)
- 使用
simplejson库(需先通过pip install simplejson安装):功能与标准库json类似,部分场景下性能更优:
import simplejson as json import requests my_request = requests.get("https://jsonplaceholder.typicode.com/users") request_parse = json.loads(my_request.text)
内容的提问来源于stack exchange,提问作者AMMAR AHMED
相关产品推荐
相关产品推荐

