import re def parse_querydict_nested(qdict): """ Chuyển QueryDict thành dict, xử lý các key dạng a[b][c] thành dict lồng nhau. """ result = {} for key in qdict.keys(): values = qdict.getlist(key) # Tách key theo cấu trúc a[b][c] parts = re.findall(r'([^\[\]]+)', key) current = result for i, part in enumerate(parts): if i == len(parts) - 1: # Gán giá trị cuối current[part] = values if len(values) > 1 else values[0] else: if part not in current: current[part] = {} current = current[part] return result def simplify_indexed_dict(d): """ Nếu dict có toàn key số (0,1,2,...), chuyển thành list. Đệ quy áp dụng cho dict và list con. """ if isinstance(d, dict): keys = d.keys() if all(k.isdigit() for k in keys): # Convert dict có key dạng số thành list return [simplify_indexed_dict(d[k]) for k in sorted(keys, key=int)] else: return {k: simplify_indexed_dict(v) for k, v in d.items()} elif isinstance(d, list): return [simplify_indexed_dict(i) for i in d] else: return d def querydict_to_nested_dict(qdict): """ Hàm chính: từ QueryDict trả về dict lồng đã đơn giản hóa. """ raw_nested = parse_querydict_nested(qdict) return simplify_indexed_dict(raw_nested)