首页 > 解决方案 > 从两个元组列表(随机顺序)中取两个值并相乘

问题描述

我有两个列表,它们是元组列表。

例如

List1 = [('zaidan', 0.0013568521031207597),('zimmerman', 0.0013568521031207597), ('ypa', 0.004070556309362279)]
List2 = [('zimmerman', 0.0013568521031207597), ('ypa', 0.004070556309362279), ('zaidan', 0.0013568521031207597)]

如果项目的顺序相同,我可以使用以下代码将两个值相乘:

val = [(t1, v1*v2) for (t1, v1), (t2, v2) in zip(tf,idf)]

但我的问题是列表随机输出的顺序,因此代码不起作用。所以基本上我需要查看一个列表中的单词是否与另一个列表中的单词匹配,然后以与元组列表类似的方式相乘以获得输出。

标签: pythonlisttuplestf-idf

解决方案


这个问题很好地展示了dictionary数据结构的优势以及您的问题如何从中受益。因此,首先,我们将您的元组列表转换为字典(dict-calls),然后根据您的要求“组合”这两个字典以获得所需的结果。

lst1 = [('zaidan', 0.0013568521031207597),('zimmerman', 0.0013568521031207597), ('ypa', 0.004070556309362279)]

lst2 = [('zimmerman', 0.0013568521031207597), ('ypa', 0.004070556309362279), ('zaidan', 0.0013568521031207597)]

dct1 = dict(lst1)
dct2 = dict(lst2)

res = {k: v * dct2.get(k, 1) for k, v in dct1.items()}.items()

产生:

dict_items([('zaidan', 1.8410476297432288e-06), ('zimmerman', 1.8410476297432288e-06), ('ypa', 1.656942866768906e-05)])

如果dict_item数据类型令人困惑,您始终可以将其转换为 vanilla-list。

res = list(res)
print(res)
# [('zaidan', 1.8410476297432288e-06), ('zimmerman', 1.8410476297432288e-06), ('ypa', 1.656942866768906e-05)]

推荐阅读