这是包含单词类型标签的列表
t = [('The','OTHER'),('name','OTHER'),('is','OTHER'),('Wall','ORGANIZATION'),('Mart','ORGANIZATION'),('and','OTHER'),('Thomas','ORGANIZATION'),('Cook','ORGANIZATION')]
期望是有条件地检查后续元组是否标记为组织,如果是这样,将它们与空格连接起来并在整个列表中继续相同。
预期产出:
Wall Mart, Thomas Cook
for x in t:
if(x[1] == 'ORGANIZATION'):
org_list = org_list + ' | ' + x[0]
我只能提取名称,但并没有真正获得一种可以连接标记为组织的单词的方法。
参考其他问题:[链接]在python的列表中连接元组的元素
预期产出:沃尔玛、托马斯·库克
鉴于两个后续'ORGANIZATION'
之间总会有'OTHER'
,一种方法是使用 itertools.groupby
按第二个元素对后续元组进行分组,如果分组key
'ORGANIZATION'
,则str.join
它们的第一个项目:
t = [('The','OTHER'),('name','OTHER'),('is','OTHER'),('Wall','ORGANIZATION'),
('Mart','ORGANIZATION'),('and','OTHER'),('Thomas','ORGANIZATION'),
('Cook','ORGANIZATION')]
from itertools import groupby
from operator import itemgetter as g
[' '.join(i[0] for i in [*v]) for k,v in groupby(t, key=g(1)) if k=='ORGANIZATION']
# ['Wall Mart', 'Thomas Cook']
如果您更喜欢没有任何导入的 for 循环解决方案,您可以执行以下操作: -- 这仅适用于两个后续标签:
f = False
out = []
for i in t:
if i[1] == 'ORGANIZATION':
if not f:
out.append(i[0])
f = True
else:
out[-1] += f' {i[0]}'
f = False
print(out)
# ['Wall Mart', 'Thomas Cook']
您可以使用以下解决方案:
t = [('The','OTHER'),('name','OTHER'),('is','OTHER'),('Wall','ORGANIZATION'),('Mart','ORGANIZATION'),('and','OTHER'),('Thomas','ORGANIZATION'),('Cook','ORGANIZATION')]
result = [[]]
for i, j in t:
if j == 'ORGANIZATION':
result[-1].append(i)
elif result[-1]:
result.append([])
result = [' '.join(i) for i in result if i]
# ['Wall Mart', 'Thomas Cook']