【发布时间】:2021-03-15 04:29:09
【问题描述】:
我有一个术语(单词)和分配给它们的分数的字典,例如:
{'goose': 12.34521, 'egg': 8.54021}
我的任务是按分数对它们进行排序,当分数相等时,然后按字典顺序按键,然后简单地以格式打印前 10 个术语:
term1, term2, ..., term10
这就是我所做的:
# term_idf is dict as explained above
term_idf_sorted = sorted(term_idf_dict.items(), key=functools.cmp_to_key(cmp_term_score))
terms_sorted = list(map(lambda p: p[0], term_idf_sorted[:n_top_terms]))
print(", ".join(terms_sorted))
比较函数在哪里
def cmp_term_score(term_score_1, term_score_2):
if term_score_1[1] == term_score_2[1]:
return term_score_1[0].casefold() < term_score_2[0].casefold()
else:
return term_score_2[1] - term_score_1[1]
当我根据一些文本创建 dict 然后打印排序后的版本时,我会得到类似:
[('parish', 7.427144133408616), ('saar', 4.406719247264253), ('saaremaa', 4.406719247264253), ('jõe', 4.406719247264253), ('villag', 4.208268308540415) ...]
问题是 'jõe' 应该在 'saar' 和 'saaremaa' 之前>,这真的让我很困惑。 我试图更改比较功能,但由于这种字典比较,我的其他测试用例失败了。 [第二次失败发生在 {'egg': 3.05, 'descend': 3.05} 其中 'egg' 在 'descend' 之前打印,但 'descend' 应该是第一个]
如何利用这种词典排序(作为第二优先级)保持一致?
注意。字典术语从文件中读取为 utf-8 字符串。
【问题讨论】:
-
您的确切 Python 版本是什么?
-
@Selcuk Python 3.8
标签: python python-3.x sorting