#python #json
#python #json
Вопрос:
Недавно я начал работать с чтением и записью json на python и должен внедрить некоторые книги в библиотечную систему из предоставленного файла json, это выглядит следующим образом;
[
{
"author": "Chinua Achebe",
"country": "Nigeria",
"imageLink": "images/things-fall-apart.jpg",
"language": "English",
"link": "https://en.wikipedia.org/wiki/Things_Fall_Apartn",
"pages": 209,
"title": "Things Fall Apart",
"year": 1958
},
Я создал этот небольшой фрагмент кода, чтобы перенести мои книги в словарь Python, прежде чем внедрять его в мою большую систему.
import json
with open('C:/Users/daann/Downloads/booksset1.json') as json_file:
booklist = json.load(json_file)
print(booklist)
Мои вопросы касаются словарей и того, как прочитать данные из моего json в словаре, сейчас у меня есть данные в длинном словаре, но как мне прочитать, например, только авторов? Или только имена? Я полностью забыл и нигде не могу его найти.
Другой вопрос, если бы я захотел удалить, например, эту первую книгу, которую я поместил здесь, с автором по имени «Чинуа Ачебе», есть ли способ сделать это (удалить все данные, касающиеся этой книги, с указанным именем автора)?
Комментарии:
1.
authors = [d["author"] for d in booklist]
Ответ №1:
Вот несколько способов перебора ваших данных:
booklist = [
{
"author": "Chinua Achebe",
"country": "Nigeria",
"imageLink": "images/things-fall-apart.jpg",
"language": "English",
"link": "https://en.wikipedia.org/wiki/Things_Fall_Apartn",
"pages": 209,
"title": "Things Fall Apart",
"year": 1958
},
{
"author": "Joe Jackson",
"country": "USA",
"imageLink": "images/white_socks.jpg",
"language": "English",
"link": "https://en.wikipedia.org/wiki/white_sox",
"pages": 500,
"title": "My Shoes Hurt My Feet",
"year": 1919
},
{
"author": "Jane Mae",
"country": "Canada",
"imageLink": "images/ehhhh.jpg",
"language": "French",
"link": "https://en.wikipedia.org/wiki/ehhhhn",
"pages": 123,
"title": "What's That Aboot",
"year": 2000
}]
# Get all authors in a list (might want to convert to set to remove duplicates)
authors = [d["author"] for d in booklist]
print (authors)
# Find all books by author 'Chinua Achebe'
for book in booklist:
if book['author'] == 'Chinua Achebe':
print (book)
# Find all books later than year 1950
for book in booklist:
if book['year'] > 1950:
print (book['title'], book['year'])
Ответ №2:
Каждая запись в booklist
представляет собой словарь Python, сокращенный как dict
. Для доступа к полю в словаре используется обозначение book[field_name]
. В вашем случае field_name
имеет значение "author"
.
for book in booklist:
print(book["author"]) # or any field you want
Ответ №3:
Если вы хотите получать книги по авторам, вам нужно будет создать другой поиск author -> books:
import collections
books_by_author = collections.defaultdict(list)
for b in booklist:
books_by_author[d['author']].append(b)
# and then
books_by_Chinua_Achebe = books_by_author['Chinua Achebe']
Эта ссылка может быть полезна для начала работы со словарями:https://realpython.com/python-dicts