由于使用 python dict 处理大量数据的性能不佳,我设法迁移到 redis。所以我有以下内容:
"doc1" => ('989', 4.0), ('99', 4.0), ('990', 4.0), ('991', 4.0), ('992', 4.0), ('993', 4.0), ('994', 4.0), ('995', 4.0), ('996', 4.0), ('997', 4.0), ('998', 4.0), ('999', 4.0)
"doc2" => ('4', 4.0), ('21', 4.0), ('55', 4.0), ('991', 4.0), ('992', 4.0), ('993', 4.0), ('994', 4.0), ('995', 4.0), ('996', 4.0)
"result" => ('991', 8.0), ('992', 8.0), ('993', 8.0), ('994', 8.0), ('995', 8.0), ('996', 8.0), ('99', 4.0),('4', 4.0), ('21', 4.0), ('55', 4.0)
如您所见,我想通过使用 python 将两个 redis 列表合并为一个,如果 doc1 中存在 doc2 中的元素求和它们的值,如果 doc1 中的元素在 doc2 中不存在,则添加结果的要素。我之前使用 dict 的实现是:
result_array = {k: [db_array.get(k, result_array.get(k))[0],db_array.get(k, dv)[1] + result_array.get(k, dv)[1]] for k in set(db_array) | set(result_array)}
如您所见,此解决方案适用于:
{'991': [4.0, 's.text'], '21': [4.0, 't.text'], '990': [4.0, 'b.text']}
但是redis不支持列表中的列表,所以我必须找到不同的解决方案。