Как я могу создать вложенный словарь, используя цикл for в Python?

Я создаю загрузчик YouTube для своего проекта, поэтому я играл с API YouTube. У меня проблема с помещением данных в словарь, например, это данные:

result = {'kind': 'youtube#searchListResponse', 'etag': '5JMmuS5CVq2hYbanuVXwLKfuwXk', 'nextPageToken': 'CAEQAA', 'regionCode': 'US', 'pageInfo': {'totalResults': 1000000, 'resultsPerPage': 1}, 'items': [{'kind': 'youtube#searchResult', 'etag': '_quYyNz6XPXmAaWfx4pkGm_ZXRA', 'id': {'kind': 'youtube#video', 'videoId': 'Jn09UdSb3aA'}, 'snippet': {'publishedAt': '2020-03-04T12:00:04Z', 'channelId': 'UCyOfqgtsQaM3S-VZnsYnHjQ', 'title': 'The Best of Chopin', 'description': 'Buy the MP3 album on the Official Halidon Music Store:  Listen to our playlist on Spotify: ialClassics Order “100 ...', 'thumbnails': {'default': {'url': 'https://i.ytimg.com/vi/Jn09UdSb3aA/default.jpg', 'width': 120, 'height': 90}, 'medium': {'url': 'https://i.ytimg.com/vi/Jn09UdSb3aA/mqdefault.jpg', 'width': 320, 'height': 180}, 'high': {'url': 'https://i.ytimg.com/vi/Jn09UdSb3aA/hqdefault.jpg', 'width': 480, 'height': 360}}, 'channelTitle': 'HALIDONMUSIC', 'liveBroadcastContent': 'none', 'publishTime': '2020-03-04T12:00:04Z'}}]}

    search = {}
    search_data = []

    for item in result['items']:
        title = item['snippet']['title']
        description = item['snippet']['description']
        video = item['id']['videoId']

        search['title'] = title
        search['description'] = description
        search['videoId'] = video
    
        search_data.append(search)

И мне трудно добавлять все данные в словарь с «названием» в качестве ключа. Итак, я хочу, чтобы словарь выглядел так:

{'The Best of Chopin': 
         {'description': 'Buy ... : AYhx Listen .... ', 
          'videoId': 'Jn09UdSb3aA'}, 
'The Next Title': 
         {'description': 'blah blah', 
          'videoId':'121212121'}, 
'The Third one.... and goes on

Я читал несколько статей о вложенном словаре, но я вижу много повторений, но не то, как его создать. Я пытался немного поиграть, но не смог этого сделать. Единственное близкое решение, которое я пробовал, - это использовать «перечисление» в цикле for для создания с ключом, но я пытаюсь использовать заголовок в качестве ключа. Как я могу это сделать? Любые советы будут оценены.

Что такое search_result? Это должно быть result?

Barmar 25.12.2020 04:15

извините что опечатка!!

Sarah 25.12.2020 04:20
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Делай это так:

search[title] = {}
search[title]['description'] = description
search[title]['videoId'] = video

Или проще search[title] = {'description': description, 'videoId': video}

Barmar 25.12.2020 04:16

Спасибо за совет! Но как я могу добавить к search_data? Я попробовал сейчас с search_data.append(search) , но, похоже, у меня есть только первые данные...

Sarah 25.12.2020 04:28

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

Jarvis 25.12.2020 04:29

О боже, я тупой, лол, ты прав, я только что создал только для 1 выхода, хахаха

Sarah 25.12.2020 04:30
search_result = {'kind': 'youtube#searchListResponse', 'etag': '5JMmuS5CVq2hYbanuVXwLKfuwXk', 'nextPageToken': 'CAEQAA', 'regionCode': 'US', 'pageInfo': {'totalResults': 1000000, 'resultsPerPage': 1}, 'items': [{'kind': 'youtube#searchResult', 'etag': '_quYyNz6XPXmAaWfx4pkGm_ZXRA', 'id': {'kind': 'youtube#video', 'videoId': 'Jn09UdSb3aA'}, 'snippet': {'publishedAt': '2020-03-04T12:00:04Z', 'channelId': 'UCyOfqgtsQaM3S-VZnsYnHjQ', 'title': 'The Best of Chopin', 'description': 'Buy the MP3 album on the Official Halidon Music Store:  Listen to our playlist on Spotify: ialClassics Order “100 ...', 'thumbnails': {'default': {'url': 'https://i.ytimg.com/vi/Jn09UdSb3aA/default.jpg', 'width': 120, 'height': 90}, 'medium': {'url': 'https://i.ytimg.com/vi/Jn09UdSb3aA/mqdefault.jpg', 'width': 320, 'height': 180}, 'high': {'url': 'https://i.ytimg.com/vi/Jn09UdSb3aA/hqdefault.jpg', 'width': 480, 'height': 360}}, 'channelTitle': 'HALIDONMUSIC', 'liveBroadcastContent': 'none', 'publishTime': '2020-03-04T12:00:04Z'}}]}
search_data = {}
for item in search_result['items']:
    title = item['snippet']['title']
    description = item['snippet']['description']
    video = item['id']['videoId']
    temp = {}
    temp['description'] = description
    temp['videoId'] = video
    search_data[title] = temp

print(search_data)

Выход:

{'The Best of Chopin': {'description': 'Buy the MP3 album on the Official Halidon Music Store:  Listen to our playlist on Spotify: ialClassics Order “100 ...', 'videoId': 'Jn09UdSb3aA'}}

Другие вопросы по теме