Python json / вопросы по словарю

#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