按可用连字符数追加列表项

2024-09-29 03:37:09 发布

您现在位置:Python中文网/ 问答频道 /正文

mylist = [('country', 'NN'), ('shoot', 'NN-DT-PPL'), ('threats', 'NN-JJ'), ('both','RB-JJ-NN'), ('during', 'NN-VBD-JJ-RB'), ('former', 'NN-RB'), ('school', 'NN-CC-JJ-DT'), 
    ('teacher', 'NN-VBZ-PPL-JJ-DT'), ('receive', 'VBZ'), ('batman', 'NN-IN-ABX-CD-RB')]

我有一张名单叫mylist。它由元组和单词及其随机标记组成。我不想使用reg-ex。最小标签是1,最大标签是5。我想有5个不同的名单根据标签的数量。你知道吗

对于一个标签元组,我尝试了以下方法:

one=[] for i in mylist: if '-' not in i[1]: one.append(i) print one

正确打印[('country', 'NN'), [('receive', 'VBZ')。你知道吗

对于第二个标签,我希望打印[('threats', 'NN-JJ'), [('former', 'NN-RB')

依此类推,第三,第四和第五个标签集。我不知道怎么做。你知道吗

我的实际文件有n个标记,它由大约1000万个单词和它们的标记组成。有没有什么方法可以让我们知道哪个词有最大的不同标签?你知道吗

这会很有帮助的!你知道吗


Tags: 标记dtnn标签pplonecountryreceive
3条回答

您可以使用defaultdict来组织数据,使用.count来计算-的数量。你知道吗

from collections import defaultdict

mylist = [('country', 'NN'), ('shoot', 'NN-DT-PPL'), ... ]
res = defaultdict(list)

for item, tags in mylist:
    res[tags.count('-') + 1].append((item, tags))

您可以使用以下代码打印结果。你知道吗

for k, v in res.items():
    print(str(k) + ": " + str(v))

印刷品:

brunsgaard@archbook /tmp> python test2.py
1: [('country', 'NN'), ('receive', 'VBZ')]
2: [('threats', 'NN-JJ'), ('former', 'NN-RB')]
3: [('shoot', 'NN-DT-PPL'), ('both', 'RB-JJ-NN')]
4: [('during', 'NN-VBD-JJ-RB'), ('school', 'NN-CC-JJ-DT')]
5: [('teacher', 'NN-VBZ-PPL-JJ-DT'), ('batman', 'NN-IN-ABX-CD-RB')]
mylist = [('country', 'NN'), ('shoot', 'NN-DT-PPL'), ... ]
res = defaultdict(list)

for item, tags in mylist:
    res[tags.count('-') + 1].append((item, tags))

其他方法

from itertools import groupby
from operator import itemgetter


a=[('country', 'NN'), ('shoot', 'NN-DT-PPL'), ('threats', 'NN-JJ'), ('both','RB-JJ-NN'), ('during', 'NN-VBD-JJ-RB'), ('former', 'NN-RB'), ('school', 'NN-CC-JJ-DT'),
    ('teacher', 'NN-VBZ-PPL-JJ-DT'), ('receive', 'VBZ'), ('batman', 'NN-IN-ABX-CD-RB')]


func=lambda x:len(x[1].split('-'))
for k,g in groupby(sorted(a,key=func),key=func):
    print k,list(g)

#0utput
1 [('country', 'NN'), ('receive', 'VBZ')]
2 [('threats', 'NN-JJ'), ('former', 'NN-RB')]
3 [('shoot', 'NN-DT-PPL'), ('both', 'RB-JJ-NN')]
4 [('during', 'NN-VBD-JJ-RB'), ('school', 'NN-CC-JJ-DT')]
5 [('teacher', 'NN-VBZ-PPL-JJ-DT'), ('batman', 'NN-IN-ABX-CD-RB')]

相关问题 更多 >