Как я могу разделить свой словарь по слову «по» и оставить только название книги? - PullRequest
1 голос
/ 14 апреля 2020

Вот пример моего словаря:

{'Fiction Books 2019': ['The Testaments by Margaret Atwood',
'Normal People by Sally Rooney',
'Where the Forest Meets the Stars by Glendy Vanderah',
'Ask Again, Yes by Mary Beth Keane',
'Queenie by Candice Carty-Williams',
"On Earth We're Briefly Gorgeous by Ocean Vuong",
'A Woman Is No Man by Etaf Rum',
'The Overdue Life of Amy Byler by Kelly Harms'... etc } 

Как мне сделать, чтобы сохранить только название книг?

Я пробовал следующее, но l oop добавляет все книги к каждому ключу в моем словаре:

books_name_dict = dict.fromkeys((col_names), [])

for k in books_name_dict:
    for i in range(len(nominee_list_dict_try[k])):
        books_name_dict[k].append(nominee_list_dict_try[k][i].split(' by ')[0])

Ответы [ 3 ]

2 голосов
/ 14 апреля 2020

Вы можете использовать:

books = {k: [x.split(" by ")[0] for x in v] for k, v in books.items()}

Демо

1 голос
/ 14 апреля 2020
books_name_dict = {'Fiction Books 2019': ['The Testaments by Margaret Atwood',
'Normal People by Sally Rooney',
'Where the Forest Meets the Stars by Glendy Vanderah',
'Ask Again, Yes by Mary Beth Keane',
'Queenie by Candice Carty-Williams',
"On Earth We're Briefly Gorgeous by Ocean Vuong",
'A Woman Is No Man by Etaf Rum',
'The Overdue Life of Amy Byler by Kelly Harms']} 

for k,v in books_name_dict.items():
    books_name_dict[k] = [b.split(" by ")[0] for b in v]
1 голос
/ 14 апреля 2020

Это потому, что вы указали один экземпляр списка [] при вызове dict.fromkeys. Вот почему вы видите все в каждом списке, это всего лишь один список!

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

import collections

books_name_dict = collections.defaultdict(list)
for k in books_name_dict:
    for i in range(len(nominee_list_dict_try[k])):
        books_name_dict[k].append(nominee_list_dict_try[k][i].split(' by ')[0])

Обновление

Кроме того, итерация может быть выполнена немного более напрямую.

for k, v in books_name_dict.items():
    for title in v:
        books_name_dict[k].append(title.split(' by ')[0])
...