如何在Python中将字典列表转换为roll_id与id反向映射的字典列表?
解决方法
可以通过以下Python代码实现需求:
original_data = [ {"id": 1, "roll_id": ["101", "201"]}, {"id": 2, "roll_id": ["301", "201"]}, {"id": 3, "roll_id": ["424"]} ] # 初始化中间字典,用于按roll_id聚合id roll_id_map = {} for item in original_data: current_id = str(item["id"]) # 转为字符串匹配示例格式 for roll_id in item["roll_id"]: # 如果roll_id不在字典中,先创建空列表 if roll_id not in roll_id_map: roll_id_map[roll_id] = [] # 将id添加到对应roll_id的列表中 roll_id_map[roll_id].append(current_id) # 将中间字典转换为目标格式的列表 result = [{"roll_id": rid, "id": ids} for rid, ids in roll_id_map.items()] print(result)
代码说明:
- 初始化中间字典:
roll_id_map用来临时存储每个roll_id对应的所有id,方便后续聚合。 - 遍历原数据:逐个处理原列表中的每个字典,把
id转为字符串(和示例输出格式一致),再遍历该字典下的所有roll_id。 - 聚合id:如果当前
roll_id还没在字典里,就创建一个空列表;然后把当前id添加到这个roll_id对应的列表中。 - 转换格式:用列表推导式把中间字典转换成要求的列表格式,每个元素是包含
roll_id和id列表的字典。
运行这段代码后,输出结果就是你需要的格式:
[ {'roll_id': '101', 'id': ['1']}, {'roll_id': '201', 'id': ['1', '2']}, {'roll_id': '301', 'id': ['2']}, {'roll_id': '424', 'id': ['3']} ]
内容的提问来源于stack exchange,提问作者BBG
相关产品推荐
相关产品推荐

