У меня есть словарь с длинными строками в качестве ключей и устанавливает в качестве значений.У меня также есть список ключевых слов.Например,
dict1 = {"This is the long key with 9 in it.": {'value1'}, 'I have another long string with 4 and keyword': {'value2'}}
list_of_keywords = ['this', 'is', 'a', 'keyword']
Я хотел бы отфильтровать новые значения в кортеж из цифр или слов из списка ключевых слов.Таким образом, приведенный выше словарь будет преобразован в
final_dict1 = {('9', 'this', 'is'): {'value1'}, ('4', 'keyword'): {'value2'}}
У меня есть два регулярных выражения ниже этой работы, и у меня есть функция, которая выполняет большую часть того, что я хотел бы сделать:
import re
digit_regxep = r"\s\b\d{1,3}\b"
keyword_regexp = r"\b({})\b"
def filter_dict_values_for_keyword_digit(dict1, keyword_regexp, digit_regexp, list_of_keywords, sep='|'):
formatted_regexp = regexp.format(sep.join(keyword_regexp))
word = re.compile(formatted_regexp)
word1 = re.compile(digit_regexp)
filtered_dict = dict1.update(((list(re.findall(word1, k)), list(re.findall(word, k))), v) for k, v in dict1.items())
return filtered_dict
но всякий раз, когда я пытаюсь запустить это, я получаю следующую ошибку:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in filter_dict_values_for_two_keywords
File "<stdin>", line 5, in <genexpr>
File "/anaconda/lib/python3.6/re.py", line 222, in findall
return _compile(pattern, flags).findall(string)
TypeError: expected string or bytes-like object
Есть ли что-то, что я неправильно понимаю относительно состава моего словаря, который влияет на мою функцию?У меня возникают проблемы с определением, является ли это проблемой в функции или это потому, что мои начальные значения - это набор, а не строка.