When writing parsing or data-merge algorithms, ensure the logic is context-aware and unambiguous:
Example (keyed array merge precondition + safe fallback):
def keyed_array_merge(base_items, override_items, keyed_fields=("code", "id")):
def detect_key(items):
if not items or not all(isinstance(x, dict) for x in items):
return None
for k in keyed_fields:
if all(item.get(k) is not None for item in items):
return k
return None
key = detect_key(base_items) or detect_key(override_items)
if key is None:
# ambiguous schema: append by design
return list(base_items) + list(override_items)
# keyed merge (deterministic)
index = {item[key]: item for item in base_items}
result = list(base_items)
for o in override_items:
oid = o[key]
if oid in index:
# replace existing
replace_at = result.index(index[oid])
result[replace_at] = o
else:
result.append(o)
index[oid] = o
return result