列表中具有相同数量实例的Python max

时间:2019-01-07 11:14:17

标签: python max instance

对于我的任务,我要建立一个解析器,该解析器将从json文件中提取相关信息,并将其呈现在用户友好的报告中。其中一项功能是根据多数输出识别恶意软件。这应该适用于n个json文件。

我已经成功地从目录中解析了所有json文件,并且能够从提供检测到的恶意软件的字段中提取所有相关信息,并将该信息附加到每个json文件的列表中。可以在此处看到:Lists created

我需要遍历每个列表,并在每个列表中找到最常用的元素,然后将最常用的元素添加到新列表中。

对于我来说,最常用() max()函数将不起作用,因为json文件1的列表中可能有5个元素等于最常用和3用于json文件2,依此类推。这适用于任何数量的json文件。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

使用collections.Counter

例如:

from collections import Counter

example = [('dog'),('dog'),('cat'),('cat'),('fish'),('frog'),('frog')]
c = Counter(example)
print(c.most_common(3))

输出:

[('dog', 2), ('frog', 2), ('cat', 2)]

答案 1 :(得分:0)

尝试一下:

from collections import Counter
a = [('dog'),('dog'),('cat'),('cat'),('fish'),('frog'),('frog')]
ca = Counter(a).most_common()
print([i[0] for i in ca if i[1] == max([i[1] for i in ca])])
# Should print : ['dog', 'cat', 'frog']

答案 2 :(得分:0)

从@Rakesh扩展:

from collections import Counter, defaultdict

example = [('dog'),('dog'),('cat'),('cat'),('fish'),('frog'),('frog')]
c = Counter(example)

_c = defaultdict(list)
for field in c.most_common():
    _c[field[1]].append(field[0])

print(_c)
print(max(_c))
print(_c[max(_c)])
-----
defaultdict(<class 'list'>, {2: ['dog', 'cat', 'frog'], 1: ['fish']})
2
['dog', 'cat', 'frog']