Как предложено большинством, используйте словарь, а затем, если вы хотите, и я думаю, что вы намерены сделать это, чтобы затем сохранить словарь в списке.Однако в вашем коде обнаружена проблема, когда вы передали строку для того, что, как я полагаю, вы намереваетесь представлять из списка.
def write_jsonl(movie_list, genre, rating, title, json_name):
d= {'title': title, 'genre': genre, 'rating': rating}
movie_list.append(d) #<-- movie_list based on your traceback is a str
# print(action_movies)
with jsonlines.open(json_name+'.jsonl', mode='w') as writer:
writer.write(movie_list)
Пример ниже работает так, как задумано:
all_movie_list = []
def write_jsonl(movie_list, genre, rating, title, json_name):
d= {'title': title, 'genre': genre, 'rating': rating}
movie_list.append(d)
# print(action_movies)
with jsonlines.open(json_name+'.jsonl', mode='w') as writer:
writer.write(movie_list)
write_jsonl(all_movie_list,'Crime','10','Godfather','test')
all_movie_list
[{'title': 'Godfather', 'genre': 'Crime', 'rating': '10'}]
Чем лучшеспособ сохранить список названий по жанрам в словаре, для этого вы можете использовать модель данных defaultdict
из стандартной библиотеки Python.
from collections import defaultdict
movie_list = defaultdict(list)
def write_jsonl(movie_list, genre, rating, title, json_name):
d= {'title': title, 'genre': genre, 'rating': rating}
movie_list['{}_movies'.format(genre)].append(d)
# print(action_movies)
with jsonlines.open(json_name+'.jsonl', mode='w') as writer:
writer.write(movie_list)
movie_list
>>defaultdict(list,
{'Crime_movies': [{'title': 'Godfather',
'genre': 'Crime',
'rating': '10'}]})
movie_list['Crime_movies']
>>[{'title': 'Godfather', 'genre': 'Crime', 'rating': '10'}]
Также не используйте встроенный метод или зарезервированные имена в качествепеременные, я заменил вашу dict
переменную на d
.