как оценить, находится ли словарный ключ в строке - PullRequest
1 голос
/ 16 января 2020

У меня есть словарь dict и строка text. Мне нужно оценить, появляются ли ключи словаря в строке, и напечатать их столько раз, сколько они появляются. Я пробовал код ниже, но ошибка: должно быть str, а не dict_keys

for word in text.split():
    if text.find(dict.keys()) != -1:
        print(word/n)

Пример данных:

словарь:

{'abandon': -2, 'abandoned': -2, 'abandons': -2, 'abducted': -2, 'abduction': -2}

текст:

"Brenamae_ I WHALE SLAP YOUR FIN AND TELL YOU ONE LAST TIME: GO AWHALE Metin Şentürk Twitterda @metinsenturk MUHTEŞEM ÜÇLÜ; SEN, BEN, MÜZİK RT @byunghns: ? I LOVE #틴탑 SO MUCH #쉽지않아 IS GOING TO BE SO GOOD ? que hdp maicon lo que le hizo a david luiz jajajajajajajajajajaj,igual se jodio la carrera ドラ"

Ответы [ 3 ]

2 голосов
/ 16 января 2020

Поскольку Python предупреждает вас, dict.keys() не является строкой, поэтому вы не можете вызвать .find(dict.keys()), для которого требуется строка в качестве аргумента.

Вам нужно перебирать каждый ключ и проверять каждый из них в отдельности. То, что вы сейчас делаете, не имеет особого смысла.

Правильный код для того, что вы хотите сделать:

Мне нужно оценить, появляются ли ключи словаря в строке, и напечатать их столько раз, сколько они появляются.

Это следующее:

for k in dict.keys():
    if k in text:
        for i in range(text.count(k)):
            print(k)

Это может быть оптимизировано для сканирования только text один раз, но я оставлю это вам.

Также, Я бы очень рекомендовал вам , а не называть свой словарь dict, так как это имя класса словаря по умолчанию. Используйте другое имя.

1 голос
/ 16 января 2020

Как уже писал @MarcoBonelli, ваша ошибка легко объясняется:

Когда Python предупреждает вас, dict.keys () не является строкой, поэтому вы не можете вызвать .find (dict .keys ()), которому нужна строка в качестве аргумента.

Я предлагаю использовать понимание для l oop над ключами словаря и использовать метод str.count() для получить количество раз, они появляются в строке. В следующем примере вы получите список подсписков с необходимой информацией:

d = {'d':2, 'e':-1, 'z':0}
t = 'mey tayeelor ddis erich'

r = [[k]*t.count(k) for k in d if k in t]
print(r) # [['d','d'], ['e','e','e','e,]]
0 голосов
/ 16 января 2020

str.find принимает входные данные в виде строки, что приводит к ошибке.

Вы можете попробовать сделать другую функцию такой:

def isin(string, keys):
    return any([str(i) in string for i in keys])
...