根据另一个列表中单词的出现频率对单词列表进行排序

时间:2018-09-18 00:00:07

标签: python pandas

我有一个单词列表,我想根据它作为另一个字符串列表中的子字符串出现的频率重新排序:

list_to_reorder=['apm', 'mba', 'bac', 'ms', 'grad']
list_with_strings=['don.mba', 'kun.ms', 'bob.mba', 'liz.grad', 'lily.apm', 'tina.mba', 'sash.ms', 'gin.grad', 'moma.bs']

因此,如果我查看list_to_reorder中每个元素的出现次数,则会得到:

mba => 3
ms  => 2
grad=> 2
apm => 1
bs  => 1

,然后想对第一个列表重新排序,这是预期结果:

['mba', 'ms', 'grad', 'apm', 'bac']

谢谢!

1 个答案:

答案 0 :(得分:2)

使用collections.Countersorted

from collections import Counter

>>> d = Counter([x.split('.')[-1] for x in list_with_strings])
>>> sorted(list_to_reorder, key= lambda x: d[x], reverse=True)
['mba', 'ms', 'grad', 'apm', 'bac']

也可以将d.__getitem__用作key,但我想它会变得不那么直观