代码之家  ›  专栏  ›  技术社区  ›  user2727704

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

  •  0
  • user2727704  · 技术社区  · 6 年前

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

    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']
    

    因此,如果我查看列表\u to \u reorder中每个元素的出现次数,我会得到:

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

    然后将第一个列表重新排序如下,这是预期的结果:

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

    1 回复  |  直到 6 年前
        1
  •  2
  •   rafaelc    6 年前

    使用 collections.Counter sorted

    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