Сортировать список Python по первым двум символам и вернуть тот, который имел больше вхождений - PullRequest
0 голосов
/ 19 октября 2018
list = [('Confidence', 1), ('Malicious', 1), ('Gen3', 1), ('Filecoder', 1), ('Score', 1), ('Wanacrypt', 1), ('Engine', 1), ('Eqmtct', 1), ('Wannacryptor', 1), ('Aiqcm', 1), ('Wannacrypt', 1), ('Wcryg', 1), ('Cbvj', 1), ('Farfli', 1), ('Wanna', 1), ('Wisdomeyes', 1), ('Wannacry', 1), ('High', 1), ('Static', 1), ('Wcry', 1)]

return = [WanaCrypt Wanna WannaCry WannaCrypt WannaCryptor]

1 Ответ

0 голосов
/ 18 ноября 2018

Если я вас правильно понял, числовые значения в вашем списке кортежей не влияют на ваш результат, поскольку вы ищете только строки, которые начинаются с самых распространенных первых двух символов.

Следующий код сделает это:

from collections import defaultdict, Counter

# Your list
tuples = [
    ('Confidence', 1), ('Malicious', 1), ('Gen3', 1), ('Filecoder', 1),
    ('Score', 1), ('Wanacrypt', 1), ('Engine', 1), ('Eqmtct', 1),
    ('Wannacryptor', 1), ('Aiqcm', 1), ('Wannacrypt', 1), ('Wcryg', 1),
    ('Cbvj', 1), ('Farfli', 1), ('Wanna', 1), ('Wisdomeyes', 1),
    ('Wannacry', 1), ('High', 1), ('Static', 1), ('Wcry', 1)
]

# Calculate which initial is more ocurrent
values = [t[0] for t in tuples]
initials = defaultdict(int)
for v in values:
    initials[v[:2]] += 1
initial_str = Counter(initials).most_common()[0][0]

# Creates a list with values that start with the most occurrent initial string 
results = [v for v in values if v.startswith(initial_str)]
print(results)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...