我正在处理两个单独的列表,一个是字符串的split
结果,另一个是包含列表对象的列表,列表对象中的第一项是字符串。
例如
list_0: ["Hey", "hello?", "hi"]
list_1: [["Hey", 0.13, 0.14, 0, 0.58], ["hello?", 0.15, 0.16, 1, 0.23], ["hi", 0.17, 0.18, 0, 0.32]]
list_0
的排列顺序正确,并且包含重复的值,由于它是音频文件的翻译,因此不能作为集合。在list_1
中,第三个元素是每个发言者的reference_number
。
我想对翻译进行分类并找到每个单词/短语的说话者,这样我可以看到reference_number_0
说"Hey", "hi"
和reference_number_1
说"hello?"
。
由于可能会有重复的值,因此我需要确保我没有错误地匹配第一对。
如何为每个完整短语找到ref_number
?
预期产量
0: "Hey", "hi"
1: "hello?"
作为更复杂的示例,假设我有list_0
和list_1
:
list_0: ["Have", "we", "all", "had", "lunch" yes", "yes", "not", "yet"]
list_1: [["Have", 0.0, 0.1, 0, 0.12], ["we", 0.2, 0.3, 0, 0.48], ["all", 0.4, 0.5, 0, 0.85], ["had", 0.6, 0.7, 0, 0.82], ["lunch", 0.8, 0.9, 0, 0.35], ["yes", 0.9, 1.0, 0, 0.57], ["yes", 1.1, 1.2, 1, 0.56], ["not", 1.3, 1.4, 2, 0.25], ["yet", 1.5, 1.6, 2, 0.73]]
这里有三个扬声器-0、1、2。输出应为:
0: "Have", "we", "all", "had", "lunch", "yes"
1: "yes"
2: "not", "yet"
干杯:)
答案 0 :(得分:4)
只需构建一个列表字典即可:
di={}
for l0,l1 in zip(list_0,list_1):
di.setdefault(l1[3],[]).append(l0)
>>> di
{0: ['Have', 'we', 'all', 'had', 'lunch', 'yes'], 1: ['yes'], 2: ['not', 'yet']}
对于您的特定输出:
>>> '\n'.join("{}: {}".format(e, ", ".join(di[e])) for e in sorted(di))
0: Have, we, all, had, lunch, yes
1: yes
2: not, yet
答案 1 :(得分:0)
这应该做:
from itertools import groupby
result = []
for k, v in groupby(list_1, key=lambda x: x[3]):
subresult = []
for r in list(v):
subresult.append(r[0])
result.append(subresult)
输出:
[['Have', 'we', 'all', 'had', 'lunch', 'yes'], ['yes'], ['not', 'yet']]
答案 2 :(得分:0)
好的,所以我们按期望的顺序排列了list_0
,但是根据您的评论,
list_1
不一定是任何特定顺序;唯一的方法
匹配它们是通过匹配字符串。这个问题可能应该
为了清楚起见,已经按照这种方式安排了数据。
这里出现问题。例如,假设list_0
具有以下数据:
list_0 = ['yes', 'no', 'yes', 'yes']
然后,忽略多余的浮点数据,假设list_1
告诉我们reference_number_0
说了两次'yes'
,并且
reference_number_1
说一次'yes'
,然后说一次'no'
。
我们如何分辨reference_number_1
所说的顺序
话?
讲话顺序可能是这样的:
0-yes 1-no 1-yes 0-yes
但是也可能是这样:
1-yes 1-no 0-yes 0-yes
无法判断哪个是正确的。因此,在一般情况下, 问题是无法解决的。