Если ваши входные данные действительно являются строкой, вы можете использовать ast.ast.literal_eval , чтобы преобразовать входные данные в объект Python:
import ast
import pprint
rawData = """[{'director_name': 'James Cameron','gross': 760505847, 'genres': ['Action', 'Adventure', 'Fantasy', 'Sci-Fi'],'actor_1_name': 'CCH Pounder','movie_title': 'Avatar','budget': 237000000,'title_year': 2009, 'imdb_score': 7.9},{'director_name': 'Gore Verbinski','num_critic_for_reviews': 302,'gross': 309404152,'genres': ['Action', 'Adventure', 'Fantasy'],'actor_1_name': 'Johnny Depp','movie_title': "Pirates of the Caribbean: At World's End",'budget': 300000000,'title_year': 2007,'imdb_score': 7.1},{'director_name': 'Sam Mendes', 'gross': 200074175,'genres': ['Action', 'Adventure', 'Thriller'],'actor_1_name': 'Christoph Waltz','movie_title': 'Spectre','budget': 245000000,'title_year': 2015,'imdb_score': 6.8}]"""
def index_by_title(moviess, key):
return {movie[key]: movie for movie in moviess if key in movie}
data = ast.literal_eval(rawData)
print index_by_title(data, 'director_name')
Это возвращает:
{'Gore Verbinski': {'actor_1_name': 'Johnny Depp',
'budget': 300000000,
'director_name': 'Gore Verbinski',
'genres': ['Action', 'Adventure', 'Fantasy'],
'gross': 309404152,
'imdb_score': 7.1,
'movie_title': "Pirates of the Caribbean: At World's End",
'num_critic_for_reviews': 302,
'title_year': 2007},
'James Cameron': {'actor_1_name': 'CCH Pounder',
'budget': 237000000,
'director_name': 'James Cameron',
'genres': ['Action', 'Adventure', 'Fantasy', 'Sci-Fi'],
'gross': 760505847,
'imdb_score': 7.9,
'movie_title': 'Avatar',
'title_year': 2009},
'Sam Mendes': {'actor_1_name': 'Christoph Waltz',
'budget': 245000000,
'director_name': 'Sam Mendes',
'genres': ['Action', 'Adventure', 'Thriller'],
'gross': 200074175,
'imdb_score': 6.8,
'movie_title': 'Spectre',
'title_year': 2015}}