如何按降序计算列表的列表中单个项目的出现次数?


x=[['apple', 'banana', 'carrot'],
['apple', 'banana'],
['banana', 'carrot']]

我想让结果看起来像这样:

dict  = {'banana': 3,'apple': 2, 'carrot': 2}

你可以"扁平化";您的x,然后只是计数,同时迭代(平面)x:

的唯一元素。
x = [['apple', 'banana', 'carrot'],
    ['apple', 'banana'],
    ['banana', 'carrot']]
flat_x = [a for b in x for a in b]
res = {a: sum(b == a for b in flat_x) for a in set(flat_x)}
print(res)
# {'carrot': 2, 'apple': 2, 'banana': 3}

另一种使列表列表平坦化的方法是使用itertools中的chain,因此您可以使用:

from itertools import chain
flat_x = list(chain(*x))

一行解决方案(如果您不介意导入):

import collections
lists = [
    ['apple', 'banana', 'carrot'],
    ['apple', 'banana'],
    ['banana', 'carrot']    
]
print(collections.Counter(
    item for sublist in lists for item in sublist).most_common())

文档:Counter.most_common,生成器表达式。

最新更新