首页 > 解决方案 > 将 Python 字典附加到列表

问题描述

我正在尝试将 GraphQL 查询的输出作为 JSON 进行迭代,并创建一个包含该信息的 Python 字典(“项目”变量)列表。这是我到目前为止一直在使用的代码:

url = 'https://api.github.com/graphql'
api_token = 'API_TOKEN'
headers = {'Authorization': 'token %s' % api_token}

# Parse Output
r = requests.post(url=url, json={'query': query}, headers=headers)
json_data = json.loads(r.text)
df_data = json_data['data']['user']['pinnedItems']['edges']
data = df_data
i = 0
while i < len(df_data):
    for key, value in df_data[i].items():
        projects = [
            {
                'name': value['name'],
                'url': value['url']
            }
        ]

    i += 1

但是,当我执行此代码并打印输出时projects,仅捕获第一个对象。有谁知道如何将多个对象添加到列表中?我总共有四个对象。

注意:JSON 基于 GitHub API 的 GraphQL 输出,查询如下:

query {
    user(login:"USER") {
    pinnedItems(first: 4, types: [REPOSITORY]) {
      edges {
        node {
          ... on Repository {
            name
            shortDescriptionHTML
            url
            openGraphImageUrl
          }
        }
      }
    }
  }
}

这是来自 GitHub 的完整 JSON 输出:

{
  "data": {
    "user": {
      "pinnedItems": {
        "edges": [
          {
            "node": {
              "name": "TEXT",
              "shortDescriptionHTML": "TEXT",
              "url": "URL",
              "openGraphImageUrl": "URL"
            }
          },
          {
            "node": {
              "name": "TEXT",
              "shortDescriptionHTML": "TEXT",
              "url": "URL",
              "openGraphImageUrl": "URL"
            }
          },
          {
            "node": {
              "name": "TEXT",
              "shortDescriptionHTML": "TEXT",
              "url": "URL",
              "openGraphImageUrl": "URL"
            }
          },
          {
            "node": {
              "name": "TEXT",
              "shortDescriptionHTML": "TEXT",
              "url": "URL",
              "openGraphImageUrl": "URL"
            }
          }
        ]
      }
    }
  }
}

谢谢

标签: pythongraphql

解决方案


您基本上每次都在创建一个包含一个项目的新列表。要将更多项目附加到同一个列表,您需要使用方法“list.append()”,正如 python_guy_rany 向您展示的那样。

但是,如果您想继续使用 while 循环,请不要忘记将 i+=1 添加到 python_guy_rany 代码中。我宁愿使用 for 循环:

for i in range(len(df_data)):

你可以避免 i=0 和 i+=1 。您也可以使用列表推导,但我认为坚持使用 for 循环更容易理解。


推荐阅读