gpt4 book ai didi

python - 在字典中用词收集引理

转载 作者:行者123 更新时间:2023-11-28 21:49:32 24 4
gpt4 key购买 nike

我有一个格式的文本文件

word lemma
word lemma
word lemma

像这样

workers  work
went go
going go
work work
working work

我要做的是将引理及其词收集到字典中,所以输出会像这样

{work: workers, work, working}
{go: went, going}

我试过了

mydict = {}
for line in myfile.splitlines():
lemma = line.split()[1]
word = line.split()[0]
mydict[lemma] = word

但是这段代码给出了以下输出:

{'work': 'working', 'go': 'going'}

有人可以帮忙吗?

最佳答案

您的代码几乎是正确的!问题是 mydict[lemma] = word覆盖任何与该 lemma 关联的现有 word .实际上,每个词条都可以有多个与之关联的词,所以我们真正想做的是将新词添加到集合中,而不是覆盖现有值。对此建模的自然方法是使用字符串的列表字典,而不是字符串字典。

mydict = {}
for line in myfile.splitlines():
word, lemma = line.split()
if lemma in mydict:
mydict[lemma].append(word)
else:
mydict[lemma] = [word]

if 语句是什么意思?如果在 mydict 中已经有给定 lemma 的条目,那么我们将它添加到列表中。如果它不存在,我们将使用单例列表初始化该条目。

我还冒昧地使用 Python 的语法来解包序列。 word, lemma = line.split() 等同于word = line.split()[0];引理 = line.split()[1].

Python 的优点之一是标准库可以处理许多简单的任务。这种用例正是标准库的 defaultdict专为。当您使用下标运算符 (dict[x]) 对 defaultdict 进行索引时,如果未找到值,则会使用您提供的函数创建该值。在这里,我们告诉 defaultdict 初始化一个新列表。

from collections import defaultdict
mydict = defaultdict(list)

现在代码更简单了,因为 defaultdict 负责为我们检查 if lemma in mydict。它总是会返回一个(可能是空的)列表,我们可以在其中添加单词。

for line in myfile.splitlines():
word, lemma = line.split()
mydict[lemma].append(word)

在评论中,您建议不要在输出中出现重复的 word。标准库在这里也可以提供帮助。 set是一种有点像列表的数据结构,只是它不会记住元素的顺序,它会自动删除重复项。 (在幕后,它的工作方式类似于只有键而没有值的 dict。)

我们只需要把defaultdict函数从list改成set,把append方法改成适用于 set 的版本(称为 add。)

from collections import defaultdict
mydict = defaultdict(set)

for line in myfile.splitlines():
word, lemma = line.split()
mydict[lemma].add(word)

关于python - 在字典中用词收集引理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33352004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com