python - 如何按子列表的长度对 3 个或更多列表列表进行排序
问题描述
我一直在从事一项涉及三元组的 NLP 任务,即来自文本语料库的 3 个连续字母的字符串。我有三个列表列表。第一个由两种语言的各种组合常见的频繁出现的三元组组成。第二个由他们在语言 1 中的计数组成。第三个由语言 3 中的计数组成。
我想对这些列表进行排序,将具有最多共同三元组的列表放在顶部。
让我们看一下这些列表的示例:
for i, j, k in zip(trigrams, lang1_counts, lang2_counts):
print(i,j,k)
['er_', 'n_d', '_de', 'in_', 'en_'] [1087, 1213, 2038, 903, 3855] [2996, 969, 2226, 951, 3872]
['in_', '_in', 'er_'] [903, 937, 1087] [1101, 1369, 1080]
['et_', 'de_', '_de', '_en'] [1314, 2359, 2038, 769] [880, 2254, 2881, 787]
如您所见,第一个三元组列表的长度分别为 5,3,4。我想对其进行排序,使其变为 5、4、3。对于绘图,还必须对三元组的计数进行排序。这只是一个小样本;我还有很多这样的清单。列表的列表具有相同的长度。
到目前为止,我已经尝试过这些解决方案,但都不起作用:
trigrams, lang1_counts, lang2_counts = zip(*sorted(zip(trigrams, lang1_counts, lang2_counts), key=len, reverse=True))
trigrams, lang1_counts, lang2_counts = (list(t) for t in zip(*sorted(zip(trigrams, lang1_counts, lang2_counts), key=len, reverse=True)))
谁能看到他们为什么不工作并提出一些建议?给定的方法不会引发错误;它们根本没有效果。
我的参考资料是:
解决方案
尝试这个
trigrams, lang1_counts, lang2_counts = zip(
*sorted(zip(trigrams, lang1_counts, lang2_counts), key=lambda x: len(x[0]), reverse=True))
您应该根据len
第一个元素的长度而不是压缩元组的长度进行排序,在这些情况下,所有这些都是 3
推荐阅读
- python - Django 预存
- node.js - 使用 npm 构建grapesjs
- python - 问题是我不能连续播放 2 个声音(即使使用 music.queue)它只播放 1 个音乐并且程序停止,知道吗?
- docker - 使用附加参数在 Google Cloud Run 上运行 Docker 容器
- openstreetmap - 如何在立交桥涡轮中获取特定区域的所有住宅节点?
- r - R:如何创建一个表,显示跨组的一个变量的平均值
- php - PHP用逗号分隔值
- python - 如何检查值1是否遵循值2,熊猫
- assembly - Fortran77 的棘手汇编语言语法接口
- css - 截断可缩放内容中的文本