【发布时间】:2018-02-06 15:38:16
【问题描述】:
这是我在 StackOverflow 上的第一个问题。 我一如既往地搜索(这就是为什么这是我的第一个问题!)但似乎无法理解似乎是一个简单的问题......
我在做什么:
- 我从加密货币 API 作为 json 获得答案
- 我过滤此 json 以仅获取我想要的元素
- 然后,我将每个市场的“从/到:价格”键:值对添加到字典中
我的问题:
我想像这样建立一个字典:
{Market:{FROM/TO: price, FROM/TO: price, ...}, {Market:{FROM/TO: price, FROM/TO: price, ...}, ...}
之后将其用作数据框。
但我从我的实际代码中得到的是这样的字典:
{市场:{FROM/TO:价格},{市场:{FROM/TO:价格}}
其中 'FROM/TO: price' 是 API 发送的最后一个 'Key:value'(在我的示例代码中,当它存在于市场时,它是 ETH/USD)。
我希望我的代码“查看”字典中已存在“市场”键的位置,并将所有新的“FROM/TO:价格”对附加到此“市场”键。
我知道我的代码有问题(很明显),但我真的无法理解它......
我的实际代码:
import requests
import json
d = {}
s = []
def get_data_from_url(*args):
"""
Get datas from an API url.
Treat it as json and filter everything not needed.
"""
for symbol_pair in args:
for symbols in symbol_pair:
from_symbol, to_symbol = symbols
url = 'https://www.cryptocompare.com/api/data/coinsnapshot/?fsym=' \
+ from_symbol + '&tsym=' + to_symbol
resp = requests.get(url=url)
datas = json.loads(resp.text)
# filter to get only the exchanges data
exchanges_data = datas["Data"]["Exchanges"]
for data_dict in exchanges_data:
if data_dict["TOSYMBOL"] == "WUSD":
data_dict["TOSYMBOL"] = "USD"
# if the exchange is not outdated
if data_dict["VOLUME24HOUR"] != "0":
# s.append([data_dict["MARKET"], {data_dict["FROMSYMBOL"] + "/" + data_dict["TOSYMBOL"]: data_dict["PRICE"]}])
d[data_dict["MARKET"]] = {}
d[data_dict["MARKET"]].update({data_dict["FROMSYMBOL"] + "/" + data_dict["TOSYMBOL"]: data_dict["PRICE"]})
print(d)
args = [("BTC", "USD"), ("ETH", "USD")]
get_data_from_url(args)
你能帮我解决这个问题吗? 我将不胜感激!
感谢大家,让 Pythonistas 保持愉快 :)
【问题讨论】:
-
您能否格式化您的数据样本,因为它会出现在格式正确的文档中?
-
请发布一个不依赖任何外部资源的 MCVE(
datas在示例中应该是硬编码的)并且示例输出来自给定的datas。 -
嗨!对此我很抱歉,下次我将发布没有外部依赖项的 MCVE。 @v100ev 让我走上了正轨,他的解决方案有效,我知道这很“容易”。感谢大家的早期回复:) PS:如果将来有人需要,我将编辑我的代码以发布不依赖于外部来源的数据。
标签: python json dictionary nested