Создать функцию, чтобы найти ключ значений в словаре, который соответствует алфавитным буквам, найденным в строке (Python) - PullRequest
0 голосов
/ 14 марта 2020

Я хочу создать функцию для поиска ключа значений, содержащихся в словаре, который соответствует алфавитным буквам, найденным в строке. Это мой словарь:

dict = {'0': {'a','c','d','e','b','f'},
             '1': {'c','b'},
             '2': {'a','d','e','b','g'},
             '3': {'a','c','d','b','g'},
             '4': {'g','c','f','b'},
             '5': {'a','c','d','g','f'},
             '6': {'a','c','d','e','g','f'},
             '7': {'a','c','b'},
             '8': {'a','c','d','e','b','g','f'},
             '9': {'a','c','d','b','g','f'}}

Это функция, которую я пытался создать до сих пор:

def guess_character(display, state):
    for key, value in display.items():
        if state == "".join(list(value)[:len(state)]):
            return key
        else:
            pass

Когда я проверяю свою функцию с помощью следующих операторов печати:

print(guess_character(seven_segment, 'abed'))
print(guess_character(seven_segment, 'a'))
print(guess_character(seven_segment, 'abcdefg'))

Это мой токовый выход :

None
None
None

Однако, это мой желаемый выход :

{'2', '8', '0'}
{'5', '7', '6', '0', '3', '9', '2', '8'}
{'8'}

Как мне достичь желаемого результата?

Ответы [ 2 ]

2 голосов
/ 14 марта 2020

Вы можете попробовать.

Вы можете использовать all, чтобы проверить, присутствуют ли все символы в значении , соответствующем клавише или нет.

def guess_character(d,state):
    return {k for k,v in d.items() if all(i in v for i in state)}

my_dict =   {'0': {'a','c','d','e','b','f'},
             '1': {'c','b'},
             '2': {'a','d','e','b','g'},
             '3': {'a','c','d','b','g'},
             '4': {'g','c','f','b'},
             '5': {'a','c','d','g','f'},
             '6': {'a','c','d','e','g','f'},
             '7': {'a','c','b'},
             '8': {'a','c','d','e','b','g','f'},
             '9': {'a','c','d','b','g','f'}}

print(guess_character(my_dict, 'abed'))
# {'0', '2', '8'}
print(guess_character(my_dict, 'a'))
# {'0', '2', '3', '5', '6', '7', '8', '9'}
print(guess_character(my_dict, 'abcdefg'))
# {'8'}
0 голосов
/ 14 марта 2020

Ответ Ch3steR очень хороший. Это практически то же самое, но, возможно, немного легче понять:

dict = {'0': ['a','c','d','e','b','f'],
             '1': ['c','b'],
             '2': ['a','d','e','b','g'],
             '3': ['a','c','d','b','g'],
             '4': ['g','c','f','b'],
             '5': ['a','c','d','g','f'],
             '6': ['a','c','d','e','g','f'],
             '7': ['a','c','b'],
             '8': ['a','c','d','e','b','g','f'],
             '9': ['a','c','d','b','g','f']}

def listfromstr(input1):
        c = []
        for i in input1:
                c.append(i)
        return c

def guesschar(dict1, str1):
        listofTruekeys = []
        listofstr = listfromstr(str1)
        for i in dict1:
                if all(elem in dict1[i] for elem in listofstr):
                        listofTruekeys.append(i)

        return listofTruekeys

print(guesschar(dict, 'abed'))

Вывод:

['0', '2', '8']

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