@@ -170,37 +170,44 @@ def _merge_recursive(
170170 else :
171171 data [index ] = parsed_value
172172 elif isinstance (data , list ):
173- raise ValueError (
174- "Only int keys are allowed for list values"
175- )
173+ if key == "+" :
174+ data .append (parsed_value )
175+ else :
176+ raise ValueError (
177+ "Only int keys are allowed for list values"
178+ )
176179 else :
177180 data [key ] = parsed_value
178181
179182 return
180183
181184 key_tail = "." .join (tail )
182185
183- if key .isdecimal ():
184- index = int (key )
186+ if key .isdecimal () or key == "+" :
185187 if not isinstance (data , list ):
186188 raise ValueError (
187189 "int keys are not allowed for non-list values"
188190 )
189- if index >= len (data ):
190- index = len (data )
191- if data :
192- data .append (type (data [0 ])())
193- _merge_recursive (data [index ], key_tail , value )
194- else :
195- # Try to guess type, backtrack if fails
196- data .append ([])
197- try :
198- _merge_recursive (data [index ], key_tail , value )
199- except Exception :
200- data [index ] = {}
201- _merge_recursive (data [index ], key_tail , value )
191+ if key == "+" :
192+ data .append (type (data [0 ])())
193+ _merge_recursive (data [- 1 ], key_tail , value )
202194 else :
203- _merge_recursive (data [index ], key_tail , value )
195+ index = int (key )
196+ if index >= len (data ):
197+ index = len (data )
198+ if data :
199+ data .append (type (data [0 ])())
200+ _merge_recursive (data [index ], key_tail , value )
201+ else :
202+ # Try to guess type, backtrack if fails
203+ data .append ([])
204+ try :
205+ _merge_recursive (data [index ], key_tail , value )
206+ except Exception :
207+ data [index ] = {}
208+ _merge_recursive (data [index ], key_tail , value )
209+ else :
210+ _merge_recursive (data [index ], key_tail , value )
204211 else :
205212 if not isinstance (data , dict ):
206213 raise ValueError (
0 commit comments