Python: отфильтровать ключ словаря, используя список строк - PullRequest
1 голос
/ 09 июля 2020

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

d = {'docs':['1_a', '2_a', '3_b', '4_c', '4_d']}

Я хотел бы отфильтровать d['docs'] с помощью списка фильтров, например ['a', '4'], чтобы я get:

['1_a', '2_a', '4_c', '4_d']

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

Ответы [ 5 ]

2 голосов
/ 09 июля 2020

Просто выполните поиск, если any условий поиска появятся в ваших значениях:

d = {'docs':['1_a', '2_a', '3_b', '4_c', '4_d']}
search = ['a', '4']
out = [val for val in d['docs'] if any(s in val for s in search)]

print(out)
# ['1_a', '2_a', '4_c', '4_d']
1 голос
/ 09 июля 2020

Вот go:

>>> d = {'docs':['1_a', '2_a', '3_b', '4_c', '4_d']}
>>> search = ['a', '4']
>>> [x for x in d['docs'] if any(s in x for s in search)]
['1_a', '2_a', '4_c', '4_d']
0 голосов
/ 09 июля 2020

Похоже, ОП получили то, что хотели, но это в основном напечатано, так что я могу его опубликовать. Если идея состоит в том, чтобы работать с ярлыками , тогда принятый ответ может привести к странным результатам.

Например:

>>> d = {'docs': ['2_at', '2_hat', '34_b', '4_c', '32_bat']}
>>> search = ['at', '4']
>>> [val for val in d['docs'] if any(s in val for s in search)]
['2_at', '2_hat', '34_b', '4_c', '32_bat']

Вместо этого вы можете разделить каждый элемент:

>>> d = {'docs': ['2_at', '2_hat', '34_b', '4_c', '32_bat']}
>>> search = ['at', '4']
>>> [val for val in d['docs'] if any(s in val.split('_') for s in search)]
['2_at', '4_c']
0 голосов
/ 09 июля 2020

Вы также можете использовать filter() для фильтрации элементов из списка:

list(filter(lambda x: any(i in x for i in ['a', '4']), d['docs']))
['1_a', '2_a', '4_c', '4_d']
0 голосов
/ 09 июля 2020

Я придумал решение, не уверен, что это то, что вы ищете.

d = {'docs':['1_a', '2_a', '3_b', '4_c', '4_d']}
filter = ['a', '4']
result = []

for i in (d['docs']):
    
    for f in filter:
        if f in i:
            result.append(i)

print(result)

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...