python - 从两个元组列表(随机顺序)中取两个值并相乘
问题描述
我有两个列表,它们是元组列表。
例如
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)]
但我的问题是列表随机输出的顺序,因此代码不起作用。所以基本上我需要查看一个列表中的单词是否与另一个列表中的单词匹配,然后以与元组列表类似的方式相乘以获得输出。
解决方案
这个问题很好地展示了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)]
推荐阅读
- javascript - SignalR Group 消息应用程序,创建组消息框导致刷新
- android - Xamarin.Forms Live Player - 由于 API 版本不支持的设备
- typescript - 打字稿类型的 redux-persist MigrationManifest?
- jquery - 如何在 html 模板中使用 contextPath
- webpack - 非相对导入 - Ionic - Webpack - Sourcemaps 在 Chrome 中的一个文件上偏离了几行
- android - 我无法将活动的数据(字符串)发送到活动中包含的片段
- arrays - 将字符串与字符串数组进行比较并计算 Swift 中的匹配项
- ios - iOS Autolayout:可以将约束优先级设置为 999 以使警告静音吗?
- java - grpc 异步双向服务器(Java/Python)
- python - np.where() 导致 RSI 提前结束