所以我得到了一个看起来像这样的列表:
['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
答案 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)]