并行结果、部分失败与共享状态一致性:练习答案
参考实现
完整实现:
python
def merge(rows):
output = {}
for row in rows:
if row["id"] in output and output[row["id"]] != row["text"]:
raise ValueError("conflicting evidence")
output[row["id"]] = row["text"]
return sorted(output.items())
a = {"id":"a","text":"one"}
b = {"id":"b","text":"two"}
assert merge([a,b,a]) == merge([b,a]) == [("a","one"),("b","two")]
try: merge([a,{"id":"a","text":"changed"}])
except ValueError: pass
else: raise AssertionError("conflict lost")
print("deduplicated, not overwritten")去重只合并同一证据的重复运输,不把两份独立来源合为一个来源。