Python:打印 API 调用中的某些项目,该调用是列表而非字典
Python: Print certain items from an API call that is a list and not a Dict
我正在使用加密货币交易所 API,我一直在尝试让它从 API 的列表中提取符号和最后一个。如果列表在代码本身中,我找到了很多解决方案,但我无法从 API 中提取,然后只是两个所需的项目、字段,无论你想怎么称呼它,但是在检查键时我得到None。我已经尝试了很多在本网站和其他人的教程中找到的方法,但一直 运行 出错。这是我与 API:
对话的代码
def pull():
r = requests.get('API_ADDRESS')
data = r.json()
print(type(data)) # confirms type is list
输出:class'list'
这是通过浏览器从页面 beginning/top 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 是如何提取数据的,所以我想知道我是否以错误的方式提取数据,这是问题的一部分吗?完整列表是所有支持的货币,以 [ 开头并以 ] 结尾,每种货币以 {} 打开和关闭。
我一直在使用像这样的 APIs,它们是字典并且有没有问题的键:
{
'items':[
{
'created_on':'2016-11-08',
'etag':'DELETED',
'classification':{
'type':'charge-description',
'description':'A registered charge'
我只想按顺序拉符号,最后。我能够获得符号或最后打印的唯一方法是在前面添加 [0],但随后只打印列表的第一个条目。我只是在学习 Python,所以我不确定在没有额外代码或冗余代码的情况下完成此任务的最佳方法。我想尽可能保持干净。我已经使用上面的核心代码与另一个 API 对话,它是一个 dict 并以结果开头:= 所以很容易提取我想要的数据,但这是第一个 API JSON 我已经尝试使用的列表,所以我需要一些帮助,以便我可以从这个挑战中学习。
我试过:
python getting a list of value from list of dict
但是所有列表都在代码本身中,而不是从 API 中提取的列表。作为另一种选择,我从请求转移到 pycurl,现在在检查类型时显示为:
<class 'bytes'>
经过更多的研究,我找到了一个解决方案并在下面发布了我的新工作代码作为答案。
将 data
视为字典列表。在每个字典中,你只想检索两个
{ key: value } 对。
因此,您可以为数据中的每个元素做的是:获取您想要的两个键值对,并将它们附加到一个新列表中。
即
parsed_data = []
for _dict in data:
new_dict = { "symbol": _dict["symbol"], "last": _dict["last"] }
parsed_data.append(new_dict)
这应该 return 您所描述的数据是您想要的。
遍历 data
列表中的字典列表,通过 key
:
获取字典值
print([['symbol:', d.get('symbol'), 'last:', d.get('last')] for d in data])
或索引 key
:
print([['symbol:', d['symbol'], 'last:', d['last']] for d in data])
两者产生相同的结果:
[['symbol:', 'BCNBTC', 'last:', '0.00000019437'], ['symbol:', 'BTCUSD', 'last:', '3886.76'], ['symbol:', 'DASHBTC', 'last:', '0.023404'], ['symbol:', 'DOGEBTC', 'last:', '0.00000051456'], ['symbol:', 'DOGEUSD', 'last:', '0.00199604'], ['symbol:', 'EMCBTC', 'last:', '0.000073615'], ['symbol:', 'ETHBTC', 'last:', '0.034325'], ['symbol:', 'FCNBTC', 'last:', '0.000011621']]
按照 python getting a list of value from list of dict 中的建议,如果缺少 value
,请添加一个 'alternate' 值来填充它:
print([['symbol:', d.get('symbol', None), 'last:', d.get('last', None)] for d in data if ('symbol' in d and 'last' in d)])
经过数小时的尝试、修补和谷歌搜索后,我发现有人有同样的问题,不同的代码,相似的 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)
我正在使用加密货币交易所 API,我一直在尝试让它从 API 的列表中提取符号和最后一个。如果列表在代码本身中,我找到了很多解决方案,但我无法从 API 中提取,然后只是两个所需的项目、字段,无论你想怎么称呼它,但是在检查键时我得到None。我已经尝试了很多在本网站和其他人的教程中找到的方法,但一直 运行 出错。这是我与 API:
对话的代码def pull():
r = requests.get('API_ADDRESS')
data = r.json()
print(type(data)) # confirms type is list
输出:class'list'
这是通过浏览器从页面 beginning/top 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 是如何提取数据的,所以我想知道我是否以错误的方式提取数据,这是问题的一部分吗?完整列表是所有支持的货币,以 [ 开头并以 ] 结尾,每种货币以 {} 打开和关闭。
我一直在使用像这样的 APIs,它们是字典并且有没有问题的键:
{
'items':[
{
'created_on':'2016-11-08',
'etag':'DELETED',
'classification':{
'type':'charge-description',
'description':'A registered charge'
我只想按顺序拉符号,最后。我能够获得符号或最后打印的唯一方法是在前面添加 [0],但随后只打印列表的第一个条目。我只是在学习 Python,所以我不确定在没有额外代码或冗余代码的情况下完成此任务的最佳方法。我想尽可能保持干净。我已经使用上面的核心代码与另一个 API 对话,它是一个 dict 并以结果开头:= 所以很容易提取我想要的数据,但这是第一个 API JSON 我已经尝试使用的列表,所以我需要一些帮助,以便我可以从这个挑战中学习。
我试过: python getting a list of value from list of dict
但是所有列表都在代码本身中,而不是从 API 中提取的列表。作为另一种选择,我从请求转移到 pycurl,现在在检查类型时显示为:
<class 'bytes'>
经过更多的研究,我找到了一个解决方案并在下面发布了我的新工作代码作为答案。
将 data
视为字典列表。在每个字典中,你只想检索两个
{ key: value } 对。
因此,您可以为数据中的每个元素做的是:获取您想要的两个键值对,并将它们附加到一个新列表中。
即
parsed_data = []
for _dict in data:
new_dict = { "symbol": _dict["symbol"], "last": _dict["last"] }
parsed_data.append(new_dict)
这应该 return 您所描述的数据是您想要的。
遍历 data
列表中的字典列表,通过 key
:
print([['symbol:', d.get('symbol'), 'last:', d.get('last')] for d in data])
或索引 key
:
print([['symbol:', d['symbol'], 'last:', d['last']] for d in data])
两者产生相同的结果:
[['symbol:', 'BCNBTC', 'last:', '0.00000019437'], ['symbol:', 'BTCUSD', 'last:', '3886.76'], ['symbol:', 'DASHBTC', 'last:', '0.023404'], ['symbol:', 'DOGEBTC', 'last:', '0.00000051456'], ['symbol:', 'DOGEUSD', 'last:', '0.00199604'], ['symbol:', 'EMCBTC', 'last:', '0.000073615'], ['symbol:', 'ETHBTC', 'last:', '0.034325'], ['symbol:', 'FCNBTC', 'last:', '0.000011621']]
按照 python getting a list of value from list of dict 中的建议,如果缺少 value
,请添加一个 'alternate' 值来填充它:
print([['symbol:', d.get('symbol', None), 'last:', d.get('last', None)] for d in data if ('symbol' in d and 'last' in d)])
经过数小时的尝试、修补和谷歌搜索后,我发现有人有同样的问题,不同的代码,相似的 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)