Извлечение только одного указанного слова из списка списков - PullRequest
2 голосов
/ 19 июня 2020

У меня есть следующий список списков:

my_list=[['12,5', 'users'],
 ['12,5', 'users'],
 ['1,35', 'giga'],
 ['1,35', 'giga'],
 ['old', '(11,46', 'users'],
 ['(11,46', 'users'],
 ['contact', '2.926.685', 'accounts'],
 ['2.926.685', 'accounts', 'new,'],
 ['2.926', 'accounts']]

Я пытаюсь создать отдельные списки, по одному для каждого ключевого слова:

keywords=['users', 'giga', 'accounts']

, чтобы узнать, есть ли различия в числах . Поскольку в списке может быть более одного слова, например, в ['2.926.685', 'accounts', 'new,'], мне нужно будет рассматривать только слово, включенное в ключевые слова списка.

Ожидаемый результат будет:

для users:

(12,5 , 12,5 , 11,46 , 11,46) (мне не нужно исключать дубликаты, так как меня интересует их частота)

для giga:

 (1,35 , 1,35) 

для accounts:

 (2.926.68 , 2.926.68  2.926)

Мои трудности заключаются в извлечении только определенных c слов, включенных в keywords с my_list. После этого я должен создать столько пустых списков, сколько слов нужно извлечь.

Любое предложение будет оценено.

1 Ответ

4 голосов
/ 19 июня 2020

Вы можете перебирать каждый список в my_list, проверяя значение, которое соответствует слову в keywords (преобразование keywords в набор для эффективности), и, если вы его найдете, сохраняя число c значение в словарь (используя defaultdict для простоты использования):

from collections import defaultdict
import re

my_list=[['12,5', 'users'],
 ['12,5', 'users'],
 ['1,35', 'giga'],
 ['1,35', 'giga'],
 ['old', '11,46', 'users'],
 ['11,46', 'users'],
 ['contact', '2.926.685', 'accounts'],
 ['2.926.685', 'accounts', 'new,'],
 ['2.926', 'accounts']]

keywords=set(['users', 'giga', 'accounts'])

result = defaultdict(list)

for l in my_list:
    k = None
    for v in l:
        if v in keywords:
            k = v
        if re.match(r'[0-9,.]+$', v):
            num = v
    if k is not None:
        result[k].append(num)

print({ k : v for k, v in result.items() })

Вывод:

{
 'users': ['12,5', '12,5', '11,46', '11,46'], 
 'giga': ['1,35', '1,35'], 
 'accounts': ['2.926.685', '2.926.685', '2.926']
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...