使用Cypher在Neo4j中从两个列表生成含计算权重的新列表
解决思路与实现方案
嘿,我来帮你搞定这个需求!你已经拿到了去重后的单词列表,接下来核心就是快速匹配每个单词在两个原始列表中的权重,然后按公式计算就行。下面我分两种常见场景给你具体方案:
场景1:用Python代码实现
假设你的两个原始列表是类似这样的字典列表(如果是其他格式,比如DataFrame,思路也差不多):
# 示例原始数据 list1 = [{"Word": "apple", "B1Weight": 2}, {"Word": "banana", "B1Weight": 3}] list2 = [{"Word": "banana", "B2Weight": 1}, {"Word": "cherry", "B2Weight": 4}] # 你已经得到的去重单词列表 unique_words = ["apple", "banana", "cherry"]
步骤1:把原始列表转成权重字典
先把两个列表转换成以单词为键、权重为值的字典,这样查找权重的效率会很高:
# 构建list1的权重映射 b1_weight_map = {item["Word"]: item["B1Weight"] for item in list1} # 构建list2的权重映射 b2_weight_map = {item["Word"]: item["B2Weight"] for item in list2}
步骤2:遍历计算生成新列表
遍历去重后的单词,用get方法获取权重(不存在就返回0),然后按公式计算:
new_list = [] for word in unique_words: b1_weight = b1_weight_map.get(word, 0) b2_weight = b2_weight_map.get(word, 0) new_weight = (b1_weight * 10) + b2_weight new_list.append({"Word": word, "NewWeight": new_weight}) # 打印结果 print(new_list) # 输出:[{"Word": "apple", "NewWeight": 20}, {"Word": "banana", "NewWeight": 31}, {"Word": "cherry", "NewWeight": 4}]
场景2:用Excel实现
如果你的数据在Excel表格里,也可以用函数快速搞定:
- 假设:
- 列表1的Word列在A列,B1Weight在B列
- 列表2的Word列在C列,B2Weight在D列
- 去重后的单词放在F列(F1:F3)
- 在G2单元格输入公式,下拉填充即可:
=IFERROR(VLOOKUP(F2,A:B,2,0)*10,0) + IFERROR(VLOOKUP(F2,C:D,2,0),0)
IFERROR用来处理单词不存在的情况,直接返回0VLOOKUP负责查找对应单词的权重
这样就能快速得到你想要的新列表啦!
内容的提问来源于stack exchange,提问作者Oleg
相关产品推荐
相关产品推荐

