Python3中将列表按指定参数键转换为嵌套字典的实现方案咨询
解决方案
直接给出通用实现的函数,支持任意层数的自定义分组:
def nested_group(data, group_keys): result = {} for item in data: current = result # 遍历除最后一个外的所有分组键,构建嵌套字典层级 for key in group_keys[:-1]: k_val = item[key] if k_val not in current: current[k_val] = {} current = current[k_val] # 最后一个分组键对应的值为列表,存储当前元素 last_k_val = item[group_keys[-1]] if last_k_val not in current: current[last_k_val] = [] current[last_k_val].append(item) return result
调用示例
# 原始输入数据 arr = [ {'Hotel':'Hotel 1', 'Room':'Room 1', 'Board':'Board 1', 'Precio':100}, {'Hotel':'Hotel 1', 'Room':'Room 1', 'Board':'Board 2', 'Precio':130}, {'Hotel':'Hotel 1', 'Room':'Room 2', 'Board':'Board 1', 'Precio':230}, {'Hotel':'Hotel 1', 'Room':'Room 2', 'Board':'Board 2', 'Precio':300}, {'Hotel':'Hotel 2', 'Room':'Room 4', 'Board':'Board 1', 'Precio':111}, {'Hotel':'Hotel 2', 'Room':'Room 2', 'Board':'Board 2', 'Precio':400}, {'Hotel':'Hotel 2', 'Room':'Room 1', 'Board':'Board 2', 'Precio':230} ] # 按 Hotel -> Room -> Board 三层分组 output = nested_group(arr, ['Hotel', 'Room', 'Board'])
验证输出
调用后output的结构完全符合需求,比如取output['Hotel 1']['Room 2']['Board 2']会得到:
[{'Hotel': 'Hotel 1', 'Room': 'Room 2', 'Board': 'Board 2', 'Precio': 300}]
该函数支持任意层数的分组,只需要调整group_keys参数的列表即可,比如只需按酒店和房间两层分组,传入['Hotel', 'Room']即可。
内容的提问来源于stack exchange,提问作者jpascual
相关产品推荐
相关产品推荐

