从元组中获取前 n 个结果
Getting top n results from a tuple
通过一系列函数搜索 HTML 并找到文本,然后找到关键字和分数,我最终得到一个如下所示的元组:
test_new = extract_keywords(test_test)
('keywords: ',
[('single high-level impulse noise', 23.5),
('cable replacement programme failed', 16.0),
('meet current british standards', 16.0),
('engineer michael jones', 8.333333333333334),
('18 months engineers began', 8.25),
('embarrassed householder promised', 8.0),
('second-hand television', 8.0),
('openreach chief engineer', 7.75),
('electrical interference emitted', 7.583333333333334),
('entire village lost', 7.0),
('stable broadband signal', 6.714285714285714),
('problem television fixed', 6.6),
('electrical noise', 5.75),
('electrical interference', 4.583333333333334),
('mr jones', 4.333333333333334),
('engineers discovered', 4.25))
我想我可以使用 Counter 来找到 n 个最大值,但这似乎不适用于元组。我尝试用 test_new[:3] 对其进行切片以获得最高值,因为它已经订购但也没有用。
理想情况下,我需要通过函数传递它:
def top_keywords(rake_keywords, n=3):
#get top n keywords
return
我可以在哪里 return 基于 n 值的值。尝试次数:
sorted(test_new, key=lambda t: t[1], reverse=True)[:5]
but got
'<' not supported between instances of 'str' and 'tuple'
从元组中获取前 n 项的函数
如果您想创建一个函数来获取元组中的前 n 个项目,则可以使用以下函数:
def top_n_tups (tups, n=3):
sorted_tup = sorted(tups, key=lambda tup: tup[1], reverse=True)
return sorted_tup[:n]
top_n_tups(test_new[1])
这将提供如下所示的结果集。假设这是一个元组,里面有一个元组列表。
[('single high-level impulse noise', 23.5), ('cable replacement programme failed', 16.0), ('meet current british standards', 16.0)]
你也可以调用值为n的函数。如果没有n,则默认为top 3。如果你给n=6,则为top 6。下面的例子表明。
>>> top_n_tups(test_new[1],6)
[('single high-level impulse noise', 23.5), ('cable replacement programme failed', 16.0), ('meet current british standards', 16.0), ('engineer michael jones', 8.333333333333334), ('18 months engineers began', 8.25), ('embarrassed householder promised', 8.0)]
元组包含元组列表
如果像这样将元组存储到变量中,则可以使用索引来检索它们。
test_new = ('keywords: ',
[('single high-level impulse noise', 23.5),
('cable replacement programme failed', 16.0),
('meet current british standards', 16.0),
('engineer michael jones', 8.333333333333334),
('18 months engineers began', 8.25),
('embarrassed householder promised', 8.0),
('second-hand television', 8.0),
('openreach chief engineer', 7.75),
('electrical interference emitted', 7.583333333333334),
('entire village lost', 7.0),
('stable broadband signal', 6.714285714285714),
('problem television fixed', 6.6),
('electrical noise', 5.75),
('electrical interference', 4.583333333333334),
('mr jones', 4.333333333333334),
('engineers discovered', 4.25)])
那么你可以使用这样的东西:
>>> test_new[1][:3]
[('single high-level impulse noise', 23.5), ('cable replacement programme failed', 16.0), ('meet current british standards', 16.0)]
你也可以这样获取具体值:
>>> test_new[1][0][0]
'single high-level impulse noise'
>>> test_new[1][0][1]
23.5
仅包含元组
但是,如果数据没有列表,只包含像这样的元组,那么您可以更容易地检索它。
>>> test_new = ('keywords: ',
('single high-level impulse noise', 23.5),
('cable replacement programme failed', 16.0),
('meet current british standards', 16.0),
('engineer michael jones', 8.333333333333334),
('18 months engineers began', 8.25),
('embarrassed householder promised', 8.0),
('second-hand television', 8.0),
('openreach chief engineer', 7.75),
('electrical interference emitted', 7.583333333333334),
('entire village lost', 7.0),
('stable broadband signal', 6.714285714285714),
('problem television fixed', 6.6),
('electrical noise', 5.75),
('electrical interference', 4.583333333333334),
('mr jones', 4.333333333333334),
('engineers discovered', 4.25))
然后可以通过如下方式获取:
>>> test_new[1]
('single high-level impulse noise', 23.5)
>>> test_new[:3]
('keywords: ', ('single high-level impulse noise', 23.5), ('cable replacement programme failed', 16.0))
注意 test_num[0]
是 'keywords: '
I thought I could use Counter to find the n largest values but that doesn't seem to work on tuples.
它对字典起作用,对元组起作用:
Counter(dict(test_new[1])).most_common(3)
如果像这样存储 test_new 的值:
test_new = ('keywords: ', [
('single high-level impulse noise', 23.5),
('cable replacement programme failed', 16.0),
('meet current british standards', 16.0),
('engineer michael jones', 8.333333333333334),
('18 months engineers began', 8.25),
('embarrassed householder promised', 8.0),
('second-hand television', 8.0),
('openreach chief engineer', 7.75),
('electrical interference emitted', 7.583333333333334),
('entire village lost', 7.0),
('stable broadband signal', 6.714285714285714),
('problem television fixed', 6.6),
('electrical noise', 5.75),
('electrical interference', 4.583333333333334),
('mr jones', 4.333333333333334),
('engineers discovered', 4.25)
])
那么你可以这样做:
def top_keywords(rake_keywords, n=3):
return sorted(rake_keywords[1], key=lambda t: t[1], reverse=True)[:n]
如果您的 extract_results
函数 returned ('keywords:', [<your actual dataset>])
,其中实际数据集在元组内,那么只需使用 test_new[1]
和索引数据集即可将其放入您的 sorted
代码而不是整个元组:
sorted(test_new[1], key=lambda t: t[1], reverse=True)[:5]
但是,我认为这是一个源于您的 extract_results
函数的问题。如果我猜的话,您的 extract_results
函数将此作为 return 语句:
return 'keywords: ', keywords
如果是这种情况,这会掩盖您的真实数据,因为函数现在 return 是一个包含字符串“keywords:”的元组,然后是实际关键字,您现在必须索引该元组才能获得数据。您不需要在 return 语句中写下它是给出的“关键字”;你的功能和 return keywords
self-documents 那。用 return keywords
替换该行,您可以 运行 sorted
它通常的样子,而不需要写 test_new[1]
.
如果您想帮助将 sorted
语句转换为函数,其他答案有。
根据您的 ,我最初认为问题出在数据集本身。根据您对数据的说明,情况似乎并非如此。
您的示例数据在列表中缺少结束符 ]
,但看起来您在第一次尝试切片时走在了正确的轨道上:
test_new[1][:3]
给你前 3 个元组,然后你只需要从中提取关键字:
top_keywords = [kw[0] for kw in test_new[1][:3]]
或者把它分解成一个函数:
def top_keywords(rake_keywords, n=3):
keyword_list = rake_keywords[1]
top_keyword_items = keyword_list[:n]
top_keywords = [kw[0] for kw in top_keyword_items]
return top_keywords
通过一系列函数搜索 HTML 并找到文本,然后找到关键字和分数,我最终得到一个如下所示的元组:
test_new = extract_keywords(test_test)
('keywords: ',
[('single high-level impulse noise', 23.5),
('cable replacement programme failed', 16.0),
('meet current british standards', 16.0),
('engineer michael jones', 8.333333333333334),
('18 months engineers began', 8.25),
('embarrassed householder promised', 8.0),
('second-hand television', 8.0),
('openreach chief engineer', 7.75),
('electrical interference emitted', 7.583333333333334),
('entire village lost', 7.0),
('stable broadband signal', 6.714285714285714),
('problem television fixed', 6.6),
('electrical noise', 5.75),
('electrical interference', 4.583333333333334),
('mr jones', 4.333333333333334),
('engineers discovered', 4.25))
我想我可以使用 Counter 来找到 n 个最大值,但这似乎不适用于元组。我尝试用 test_new[:3] 对其进行切片以获得最高值,因为它已经订购但也没有用。
理想情况下,我需要通过函数传递它:
def top_keywords(rake_keywords, n=3):
#get top n keywords
return
我可以在哪里 return 基于 n 值的值。尝试次数:
sorted(test_new, key=lambda t: t[1], reverse=True)[:5]
but got
'<' not supported between instances of 'str' and 'tuple'
从元组中获取前 n 项的函数
如果您想创建一个函数来获取元组中的前 n 个项目,则可以使用以下函数:
def top_n_tups (tups, n=3):
sorted_tup = sorted(tups, key=lambda tup: tup[1], reverse=True)
return sorted_tup[:n]
top_n_tups(test_new[1])
这将提供如下所示的结果集。假设这是一个元组,里面有一个元组列表。
[('single high-level impulse noise', 23.5), ('cable replacement programme failed', 16.0), ('meet current british standards', 16.0)]
你也可以调用值为n的函数。如果没有n,则默认为top 3。如果你给n=6,则为top 6。下面的例子表明。
>>> top_n_tups(test_new[1],6)
[('single high-level impulse noise', 23.5), ('cable replacement programme failed', 16.0), ('meet current british standards', 16.0), ('engineer michael jones', 8.333333333333334), ('18 months engineers began', 8.25), ('embarrassed householder promised', 8.0)]
元组包含元组列表
如果像这样将元组存储到变量中,则可以使用索引来检索它们。
test_new = ('keywords: ',
[('single high-level impulse noise', 23.5),
('cable replacement programme failed', 16.0),
('meet current british standards', 16.0),
('engineer michael jones', 8.333333333333334),
('18 months engineers began', 8.25),
('embarrassed householder promised', 8.0),
('second-hand television', 8.0),
('openreach chief engineer', 7.75),
('electrical interference emitted', 7.583333333333334),
('entire village lost', 7.0),
('stable broadband signal', 6.714285714285714),
('problem television fixed', 6.6),
('electrical noise', 5.75),
('electrical interference', 4.583333333333334),
('mr jones', 4.333333333333334),
('engineers discovered', 4.25)])
那么你可以使用这样的东西:
>>> test_new[1][:3]
[('single high-level impulse noise', 23.5), ('cable replacement programme failed', 16.0), ('meet current british standards', 16.0)]
你也可以这样获取具体值:
>>> test_new[1][0][0]
'single high-level impulse noise'
>>> test_new[1][0][1]
23.5
仅包含元组
但是,如果数据没有列表,只包含像这样的元组,那么您可以更容易地检索它。
>>> test_new = ('keywords: ',
('single high-level impulse noise', 23.5),
('cable replacement programme failed', 16.0),
('meet current british standards', 16.0),
('engineer michael jones', 8.333333333333334),
('18 months engineers began', 8.25),
('embarrassed householder promised', 8.0),
('second-hand television', 8.0),
('openreach chief engineer', 7.75),
('electrical interference emitted', 7.583333333333334),
('entire village lost', 7.0),
('stable broadband signal', 6.714285714285714),
('problem television fixed', 6.6),
('electrical noise', 5.75),
('electrical interference', 4.583333333333334),
('mr jones', 4.333333333333334),
('engineers discovered', 4.25))
然后可以通过如下方式获取:
>>> test_new[1]
('single high-level impulse noise', 23.5)
>>> test_new[:3]
('keywords: ', ('single high-level impulse noise', 23.5), ('cable replacement programme failed', 16.0))
注意 test_num[0]
是 'keywords: '
I thought I could use Counter to find the n largest values but that doesn't seem to work on tuples.
它对字典起作用,对元组起作用:
Counter(dict(test_new[1])).most_common(3)
如果像这样存储 test_new 的值:
test_new = ('keywords: ', [
('single high-level impulse noise', 23.5),
('cable replacement programme failed', 16.0),
('meet current british standards', 16.0),
('engineer michael jones', 8.333333333333334),
('18 months engineers began', 8.25),
('embarrassed householder promised', 8.0),
('second-hand television', 8.0),
('openreach chief engineer', 7.75),
('electrical interference emitted', 7.583333333333334),
('entire village lost', 7.0),
('stable broadband signal', 6.714285714285714),
('problem television fixed', 6.6),
('electrical noise', 5.75),
('electrical interference', 4.583333333333334),
('mr jones', 4.333333333333334),
('engineers discovered', 4.25)
])
那么你可以这样做:
def top_keywords(rake_keywords, n=3):
return sorted(rake_keywords[1], key=lambda t: t[1], reverse=True)[:n]
如果您的 extract_results
函数 returned ('keywords:', [<your actual dataset>])
,其中实际数据集在元组内,那么只需使用 test_new[1]
和索引数据集即可将其放入您的 sorted
代码而不是整个元组:
sorted(test_new[1], key=lambda t: t[1], reverse=True)[:5]
但是,我认为这是一个源于您的 extract_results
函数的问题。如果我猜的话,您的 extract_results
函数将此作为 return 语句:
return 'keywords: ', keywords
如果是这种情况,这会掩盖您的真实数据,因为函数现在 return 是一个包含字符串“keywords:”的元组,然后是实际关键字,您现在必须索引该元组才能获得数据。您不需要在 return 语句中写下它是给出的“关键字”;你的功能和 return keywords
self-documents 那。用 return keywords
替换该行,您可以 运行 sorted
它通常的样子,而不需要写 test_new[1]
.
如果您想帮助将 sorted
语句转换为函数,其他答案有。
根据您的
您的示例数据在列表中缺少结束符 ]
,但看起来您在第一次尝试切片时走在了正确的轨道上:
test_new[1][:3]
给你前 3 个元组,然后你只需要从中提取关键字:
top_keywords = [kw[0] for kw in test_new[1][:3]]
或者把它分解成一个函数:
def top_keywords(rake_keywords, n=3):
keyword_list = rake_keywords[1]
top_keyword_items = keyword_list[:n]
top_keywords = [kw[0] for kw in top_keyword_items]
return top_keywords