这是我在StackOverflow上的第一个问题。 我一如既往地搜索(这就是为什么这是我的第一个问题!)但似乎无法理解看似简单的问题......
我在做什么:
我的问题:
我想像这样建立一个字典:
{Market:{FROM / TO:price,FROM / TO:price,...},{Market:{FROM / TO:price,FROM / TO:price,...},...} < / p>
之后将其用作数据帧。
但是从我的实际代码中得到的是这样的字典:
{Market:{FROM / TO:price},{Market:{FROM / TO:price}}
其中'FROM / TO:price'是API发送的最后一个'Key:value'(在我的示例代码中,它是ETH / USD,当市场存在时)。
我希望我的代码“看到”词典中已存在“市场”键,并将所有新的“FROM / TO:price”对附加到此“市场”键。
我知道我的代码出了问题(显然),但我真的无法理解它......
我的实际代码:
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:)
答案 0 :(得分:1)
每次更新d[data_dict["MARKET"]]
时,首先将其设为{}
。所以当然它只包含最后一段数据;当下一条数据出现时,所有其他内容都被删除了。您应该查找现有字典并将空字典作为默认字典,如果它尚不存在的话。例如:
d[data_dict["MARKET"]] = d.get([data_dict["MARKET"],{}).update({data_dict["FROMSYMBOL"] + "/" + data_dict["TOSYMBOL"]: data_dict["PRICE"]})
答案 1 :(得分:0)
好的,我想我遇到了你的问题。这很简单 - 你每次创建一个dict并更新它。您应该首先检查它是否存在然后更新。如果它不存在 - 用它的第一个元素创建它。像这样的东西(它有效):
# if the exchange is not outdated
if data_dict["VOLUME24HOUR"] != "0":
if d.get(data_dict["MARKET"]):
d[data_dict["MARKET"]].update({data_dict["FROMSYMBOL"] + "/" + data_dict["TOSYMBOL"]: data_dict["PRICE"]})
else:
d[data_dict["MARKET"]]= {data_dict["FROMSYMBOL"] + "/" + data_dict["TOSYMBOL"]: data_dict["PRICE"]}