对于我的任务,我要建立一个解析器,该解析器将从json文件中提取相关信息,并将其呈现在用户友好的报告中。其中一项功能是根据多数输出识别恶意软件。这应该适用于n个json文件。
我已经成功地从目录中解析了所有json文件,并且能够从提供检测到的恶意软件的字段中提取所有相关信息,并将该信息附加到每个json文件的列表中。可以在此处看到:Lists created
我需要遍历每个列表,并在每个列表中找到最常用的元素,然后将最常用的元素添加到新列表中。
对于我来说,最常用()和 max()函数将不起作用,因为json文件1的列表中可能有5个元素等于最常用和3用于json文件2,依此类推。这适用于任何数量的json文件。任何帮助将不胜感激。
答案 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']