按出现频率对(嵌套的)字符串列表进行排序

时间:2019-12-04 09:34:07

标签: python

所以我得到了一个看起来像这样的列表:

['Marie', 'Lucas', 'Patsy', 'Julie', 'Peter', 'Emma', 'Kevin', 'Tobias', 'Suzy', ['Marie', 'Lucas'], ['Lucas', 'Marie'], ['Lucas', 'Patsy'], ['Patsy', 'Lucas'], ['Emma', 'Lucas'], ['Lucas', 'Emma'], ['Emma', 'Kevin'], ['Kevin', 'Emma'], ['Peter', 'Emma'], ['Emma', 'Peter'], ['Peter', 'Lucas'], ['Lucas', 'Peter'], ['Peter', 'Julie'], ['Julie', 'Peter'], ['Suzy', 'Tobias'], ['Tobias', 'Suzy']]

我想根据出现次数从高到低对列表进行排序。我使用的是print((Counter(str(netwerk)).most_common())),它返回了:

[("'", 82), (',', 40), (' ', 40), ('a', 25), ('e', 23), ('[', 17), (']', 17), ('u', 15), ('s', 15), ('m', 14), ('i', 12), ('r', 10), ('P', 10), ('t', 10), ('L', 9), ('c', 9), ('E', 7), ('y', 6), ('M', 3), ('J', 3), ('l', 3), ('K', 3), ('v', 3), ('n', 3), ('T', 3), ('o', 3), ('b', 3), ('S', 3), ('z', 3)]

单个字符的出现,我不知道为什么会这样。任何帮助表示赞赏。

我的预期结果是:

Lucas – Emma – Peter – Julie – Kevin – Marie – Patsy – Suzy – Tobias

1 个答案:

答案 0 :(得分:3)

您不能直接使用Counter,因为有些list与字符串混合在一起,因此请先将它们展平:

data = ['Marie', 'Lucas', 'Patsy', 'Julie', 'Peter', 'Emma', 'Kevin', 'Tobias', 'Suzy', ['Marie', 'Lucas'], ['Lucas', 'Marie'], ['Lucas', 'Patsy'], ['Patsy', 'Lucas'], ['Emma', 'Lucas'], ['Lucas', 'Emma'], ['Emma', 'Kevin'], ['Kevin', 'Emma'], ['Peter', 'Emma'], ['Emma', 'Peter'], ['Peter', 'Lucas'], ['Lucas', 'Peter'], ['Peter', 'Julie'], ['Julie', 'Peter'], ['Suzy', 'Tobias'], ['Tobias', 'Suzy']]
from collections import Counter
c = Counter()
for d in data:
    if isinstance(d,str):
        c[d] += 1
    elif isinstance(d,list):
        for n in d:
            c[n] += 1
c.most_common()

输出:

[('Lucas', 9),
 ('Peter', 7),
 ('Emma', 7),
 ('Tobias', 3),
 ('Patsy', 3),
 ('Marie', 3),
 ('Suzy', 3),
 ('Kevin', 3),
 ('Julie', 3)]