Python如何将包含字典的嵌套列表展平为单个汇总字典
问题原因
你的代码仅遍历了final_results[0](也就是嵌套列表的第一个子列表)来收集值,自然只能拿到第一个字典的对应字段数据。
解决方案
首先先把嵌套列表里的所有字典展平提取出来,再按键收集所有值转为元组即可:
final_results= [[{'lat': '29.97659', 'lon': '-90.40897', 'name': 'Hahnville', 'admin1': 'Louisiana', 'admin2': 'Saint Charles Parish', 'cc': 'US'}], [{'lat': '29.97678', 'lon': '-90.40877', 'name': 'Hahnville', 'admin1': 'Louisiana', 'admin2': 'Saint Charles Parish', 'cc': 'US'}], [{'lat': '29.95465', 'lon': '-90.07507', 'name': 'New Orleans', 'admin1': 'Louisiana', 'admin2': 'Orleans Parish', 'cc': 'US'}]] # 先展平嵌套列表,拿到所有字典(当前每个子列表只有1个字典的场景适用) all_dicts = [sub_list[0] for sub_list in final_results] # 初始化结果字典 res = {} # 遍历所有键 for key in all_dicts[0].keys(): # 收集每个字典中该键的值,转为元组 res[key] = tuple(d[key] for d in all_dicts)
如果你的子列表中可能包含多个字典,可以替换展平逻辑为更通用的写法:
all_dicts = [d for sub_list in final_results for d in sub_list]
运行后输出的res符合预期:
{ 'lat': ('29.97659', '29.97678', '29.95465'), 'lon': ('-90.40897', '-90.40877', '-90.07507'), 'name': ('Hahnville', 'Hahnville', 'New Orleans'), 'admin1': ('Louisiana', 'Louisiana', 'Louisiana'), 'admin2': ('Saint Charles Parish', 'Saint Charles Parish', 'Orleans Parish'), 'cc': ('US', 'US', 'US') }
注:你给出的预期输出中lon字段第三个值存在笔误,实际应为原始数据中的-90.07507
内容的提问来源于stack exchange,提问作者Stackcans
相关产品推荐
相关产品推荐

