如何搜索以命名元组为键的字典

2024-05-15 10:43:29 发布

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

我希望数据结构具有{(Document_name,term):(term count in Document)}所以我创建了一个名为dtuple的字典:

Doc_term = namedtuple("Doc_term", ["Doc", "term"])
Doc_term_count = {}
...
Doc_term_count[k] = {Doc_term(Doc_names[start_index + i], vocab[j]): row[j]}
k = k + 1
print Doc_term_count

它给我的数据结构是

^{pr2}$

我想搜索有多少个给定的术语具有类似的筛选/搜索功能:

Dtn = filter( lambda ndoc: Doc_term.term=='be', Doc_term_count)
print Dtn

它给了我空数组。请告诉我我哪里出错了。根据我的理解,我正在创建索引数组和过滤器lambda函数需要列表,但当我尝试

Doc_term_count[(booknames[start_index + i], vocab[j])].append(row[j])

它给我的错误是:KeyError:('book1.txt','be')。我认为它不接受元组作为键。在


Tags: lambdaname数据结构indexdoccount数组be
1条回答
网友
1楼 · 发布于 2024-05-15 10:43:29

我相信您生成的Doc_term_count不正确-您只需要将namedtuple映射到count。在不深入了解如何计算Doc_名称和行索引的情况下,我想您要做的是:

Doc_term_count[Doc_term(Doc_names[start_index + i], vocab[j])] = row[j]

而不是

^{pr2}$

第一种方法应生成如下所示的字典:

Doc_term_count = {
    Doc_term(Doc='book1.txt', term='be'): 1,
    Doc_term(Doc='book1.txt', term='script'): 1,
    Doc_term(Doc='book1.txt', term='this'): 1,
    Doc_term(Doc='book1.txt', term='is'): 1,
    Doc_term(Doc='book1.txt', term='there'): 1,
    Doc_term(Doc='book1.txt', term='wordcount'): 1,
    Doc_term(Doc='book2.txt', term='hello'): 2,
    Doc_term(Doc='book2.txt', term='to'): 1,
    Doc_term(Doc='book2.txt', term='book'): 1,
    Doc_term(Doc='book3.txt', term='read'): 1,
    Doc_term(Doc='book3.txt', term='by'): 1,
    Doc_term(Doc='book3.txt', term='first'): 1
}

然后可以使用元组查找值:

print Doc_term_count[('book1.txt', 'be')] # prints 1

相关问题 更多 >