Как использовать словарь для управления списком на элемент в строке? - PullRequest
0 голосов
/ 24 февраля 2019

У меня есть список и словарь:

list1 = ['C1','C1C2C3C4','C3C4C5','C2C4C5']
dict1 = {'C2C4':1, 'C3':1}

Я хочу, чтобы список был отсканирован, и если C2C4 всплывает в строке, даже если строка C2C3C4C5, поскольку она содержит C2 И C4, я хочу, чтобы он превратился в 1 в списке.То же самое можно сказать и о C3, если C3 появляется в любой из строк, тогда я хочу, чтобы он превратился в 1 в списке, а когда C3 появляется в C3C4C5, то это также должно превратиться в 1, то есть, чтобы получить результат:

list1 = [0,1,1,1]

Я использовал этот метод из того, что нашел на этом сайте:

result = [(lambda x:0 if not x else min(x))([b for a, b in dict1.items() if i in a]) for i in list1]

Но это не работает для этого сценария, так как он не подберет другие компонентывнутри строки и так выводит:

Results = [0, 0, 0, 0]

........ может кто-нибудь помочь?

1 Ответ

0 голосов
/ 24 февраля 2019

Вы можете использовать listcomp с небольшой вспомогательной функцией:

import re

list1 = ['C1', 'C1C2C3C4', 'C3C4C5', 'C2C4C5']
dict1 = {'C2C4': 1, 'C3': 1}

def func(s):
    for k, v in dict1.items():
        if all(i in s for i in re.findall('\w\d', k)):
            return v
    else:
        return 0

[func(i) for i in list1]
# [0, 1, 1, 1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...