Вот подход, который немного разбивает и очищает строку, а затем использует понимание dict с zip()
на кусочках нечетных и четных элементов списка (ключи четные, значения нечетные) для генерации искомого вывода (и будет работать со строками, которые содержат несколько пар ключ-значение, но не очень хорошо, если ваши строки содержат вложенные символы, списки и т. д.).
Тем не менее, ответ от @ jpp действительно умный.
text = '{"key"=>"Number of Contents in Sales Package", "value"=>"Pack of 3"}'
items = [t.split('=>')[1].replace('"', '') for t in text[1:-1].split(',')]
result = {k: v for k, v in zip(items[::2], items[1::2])}
print(result)
# OUTPUT
# {'Number of Contents in Sales Package': 'Pack of 3'}