由于使用pythondict处理大量数据的性能较差,我设法迁移到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实现的是:
^{pr2}$how to keep the structure of the dictionary
如您所见,此解决方案适用于:
{'991': [4.0, 's.text'], '21': [4.0, 't.text'], '990': [4.0, 'b.text']}
但是redis不支持list-in-list,所以我必须找到一个不同的解决方案。在
如果值是唯一的,可以使用redissorted set:
这将为您提供集合(两个集合中存在的元素)与分数的交集,即元素在每个集合中的得分之和。在
要获得}中的元素则比较困难,因为redis中没有{}。根据您的数据(以及两个集合中存在的元素的分数),您可以这样做(假设所有的分数(您称之为“值”)都为正,并且两个集合中相互元素的分数相同):
^{pr2}$doc1
中存在的元素而不是{相关问题 更多 >
编程相关推荐