Как вернуть словари из вложенного цикла - PullRequest
1 голос
/ 01 апреля 2020

Я прошу прощения, если это очень простой вопрос c, но я построил несколько словарей, используя вложенные циклы, и я не могу вернуть все словари, он возвращает только первый. Я знаю, что отчасти это связано с тем, что return находится в неправильном отступе, но Python позволит только отступ return data. Есть ли способ изменить эту функцию, чтобы она возвращала все словари?

import urllib.request
import json


def get_url(url):
    text = urllib.request.urlopen(url).read().decode()
    return text


def display_json(text):
    dictionary = json.loads(text)
    for item in dictionary['items']:
        for article in item['articles']:
            line = (article['article'], article['views'])
            data = dict([line])
            return data


def function(data):
    print(data)


def main():
    url = "https://wikimedia.org/api/rest_v1/metrics/pageviews/top/en.wikiversity/all-access/2018/01/all-days"
    text = get_url(url)
    data = display_json(text)
    function(data)


main()

Ответы [ 2 ]

1 голос
/ 01 апреля 2020

Используйте словарь для понимания

def display_json(text):
    return {
      item['article']:item['views'] for item in 
      json.loads(text)['items'][0]['articles']
    }

JSON структурирован следующим образом:

enter image description here

Нет необходимости от l oop до items, потому что у него есть только один элемент. Мы можем просто получить первый элемент, используя json.loads(text)['items'][0]. Даже если внутри items имеется более одного элемента, вы все равно можете управлять им внутри понимания.

1 голос
/ 01 апреля 2020

использовать генератор

def display_json(text):
    dictionary = json.loads(text)
    for item in dictionary['items']:
        for article in item['articles']:
            line = (article['article'], article['views'])
            data = dict([line])
            yield data

data = list(display_json(text))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...