首页 > 解决方案 > Python:从列表而不是字典的 API 调用中打印某些项目

问题描述

我正在使用加密货币交换 API,我一直试图让它只从 API 的列表中提取符号和最后一个。如果列表在代码本身中,我找到了许多解决方案,但是我无法从 API 中提取两个所需的项目、字段,无论您想调用什么,但是在检查键时我得到 None。我尝试了许多在本网站和其他人的教程上找到的方法,但一直遇到错误。这是我与 API 对话的代码:

def pull():
    r = requests.get('API_ADDRESS')
    data = r.json()
    print(type(data)) # confirms type is list

输出:类“列表”

这是通过浏览器从页面开头/顶部的 API URL 中的一小部分:

[{"ask":"0.00000019438","bid":"0.00000019436","last":"0.00000019437","open":"0.00000017778","low":"0.00000017500","high":"0.00000020000","volume":"215392000","volumeQuote":"39.177612838","timestamp":"2019-03-12T22:54:35.168Z","symbol":"BCNBTC"},{"ask":"3886.77","bid":"3886.76","last":"3886.76","open":"3868.90","low":"3814.66","high":"3903.39","volume":"33598.51324","volumeQuote":"129840974.9750335","timestamp":"2019-03-12T22:55:44.772Z","symbol":"BTCUSD"},{"ask":"0.023432","bid":"0.023403","last":"0.023404","open":"0.021257","low":"0.021208","high":"0.023639","volume":"78033.270","volumeQuote":"1720.630098144","timestamp":"2019-03-12T22:55:38.179Z","symbol":"DASHBTC"},

根据 API 文档,使用 curl 是如何提取数据的,所以我想知道我是否以错误的方式将其拉下,这是问题的一部分吗?完整列表是所有支持的以 [ 开头并以 ] 结尾的货币,每种货币以 {} 开头和结尾。

我一直在使用这样的 API,这些 API 是 dicts 并且具有没有问题的密钥:

{  
   'items':[  
      {  
        'created_on':'2016-11-08',
        'etag':'DELETED',
        'classification':{  
        'type':'charge-description',
        'description':'A registered charge'

我想把符号整理一下,最后。我能够获取符号或最后打印的唯一方法是在前面添加 [0],但随后只打印列表的第一个条目。我只是在学习 Python,所以我不确定在没有额外代码或冗余代码的情况下完成这项任务的最佳方法。我想尽可能保持清洁。我已经使用上面的核心代码与另一个 API 对话,它是一个 dict 并以结果开头:= 所以很容易提取我想要的数据,但这是我尝试使用的第一个 API JSON 列表,所以我需要一个帮助不大,所以我可以从这个挑战中学习。

我确实尝试 过:python从dict列表中获取值列表

但是所有列表都在代码本身中,而不是从 API 中提取的列表。作为另一种选择,我从 requests 转移到 pycurl,现在在检查类型时它显示为:

<class 'bytes'>

经过更多的研究,我找到了一个解决方案,并在下面发布了我的新工作代码作为答案。

标签: jsonapipython-3.7

解决方案


经过数小时的尝试、修补和谷歌搜索,我发现有人有同样的问题、不同的代码、相似的 API JSON 列表格式,一旦将他们的部分代码改编为我的,我只得到了要从列表中打印的符号,只有从这里打印的符号我可以做一些小的调整来只打印符号,最后再加一点缩进让它漂亮。他们做了一些非常接近我的代码的事情,但是首先将他们的 API 转储到一个文件中,所以请让我知道这是否是比下面更好的方法:

def pull():
    r = requests.get('API_ADDRESS')
    data = r.json()
    # use to confirm class type
    #print(type(data))
    # use to see if keys are present
    #print(data.keys())
    items = []
    for item in data:
        items.append(item['symbol'])
    print(items)

推荐阅读