如何从元组列表a和键列表b生成保留原值列表结构的新字典
实现方案
实现逻辑
- 先从列表
b中提取字典的键,取每个元组的首位元素,键的顺序与b的索引一一对应,正好匹配a中元组首位的分组编号 - 按分组编号对
a的元素做聚合,分别收集每个分组下所有元组的第二位、第三位元素 - 将每个分组收集到的两类元素转为元组,放入列表作为对应键的值,拼接得到最终字典
可运行代码
from numpy import nan from collections import defaultdict # 输入原始数据 a = [(0, ['Potato'], [8]), (0, ['Tomato'], [2]), (0, ['Tomato'], [2]), (0, ['Potato'], [6]), (0, ['Potato'], [12]), (0, ['Potato'], [12]), (0, nan, nan), (1, [], []), (1, [], [])] b = [('foo', 123), ('bar', 456)] # 提取目标字典的键集合 dict_keys = [item[0] for item in b] # 按分组索引分别聚合两类字段 col1_group = defaultdict(list) col2_group = defaultdict(list) for group_idx, col1_val, col2_val in a: col1_group[group_idx].append(col1_val) col2_group[group_idx].append(col2_val) # 构造最终字典 newDict = {} for group_idx, key in enumerate(dict_keys): newDict[key] = [tuple(col1_group[group_idx]), tuple(col2_group[group_idx])] print(newDict)
运行上述代码即可得到你要求的输出结构。
内容的提问来源于stack exchange,提问作者Derek_P
相关产品推荐
相关产品推荐

