所以我对这一切都不熟悉,请原谅我糟糕的格式,只是松散地掌握行话。
简而言之,我有一个
$("#container").on("click", "a.report-button", function(event) {
alert("Thx!");
});
返回json()嵌套字典(抱歉可怕的措辞),如下所示:
coins = requests.get("https://bittrex.com/api/v1.1/public/getcurrencies")
简而言之,我想访问{
"success" : true,
"message" : "",
"result" : [{
"Currency" : "BTC",
"CurrencyLong" : "Bitcoin",
"MinConfirmation" : 2,
"TxFee" : 0.00020000,
"IsActive" : true,
"CoinType" : "BITCOIN",
"BaseAddress" : null
}, {
"Currency" : "LTC",
"CurrencyLong" : "Litecoin",
"MinConfirmation" : 5,
"TxFee" : 0.00200000,
"IsActive" : true,
"CoinType" : "BITCOIN",
"BaseAddress" : null
}]
}
中的每个字典并使用它们构建我自己的值,为每个硬币生成一个类,以便继承代码被填充,如:
coins["result"]
我理解这段代码不正确,但我试图让你知道我想要完成的事情。对不起,我的可怕的措辞,一般的编程新手,虽然我对功能的一般掌握,我仍然试图赶上行话。
答案 0 :(得分:2)
有几种不同的方法可以执行此操作,例如,您可以解析__init__
函数中的字典。
我倾向于通过单独的@classmethod
处理这个问题,该class Coinbuilder:
def __init__(self, cur, curlong):
self.currency = cur
self.currency_long = curlong
@classmethod
def build_from_dict(coin_b, d):
attributes = {'Currency', 'CurrencyLong'}
try:
class_dct = {a: d[a] for a in attributes}
except:
raise ValueError('Input did not contain necessary attributes')
return coin_b(class_dct['Currency'], class_dct['CurrencyLong'])
负责解析字典以创建我的类的实例。
这样的事情:
Coinbuilder
这样我就不会强制传递x = Coinbuilder.build_from_dict({'Currency': 'BTC', 'CurrencyLong': 'Bitcoin'})
字典来创建一个类实例,但是我有一个简单的方法可以用来解析字典来创建我的类的实例。
对于这个简单的例子,我可以做到以下几点:
y = Coinbuilder('BTC', 'Bitcoin')
或者我可以使用:
print(x.currency, x.currency_long)
print(y.currency, y.currency_long)
获得两个相等的类实例:
BTC Bitcoin
BTC Bitcoin
输出:
@classmethod
使用您的示例输入作为指南,一旦您编写my_coins = []
for result in coins['result']:
my_coins.append(Coinbuilder.build_from_dict(result))
来解析字典,您就可以使用:
my_coins = [Coinbuilder.build_from_dict(result) for result in coins['result']]
或者:
routes
答案 1 :(得分:0)
以下是您要执行的操作的完整脚本:
import requests
import json
class CoinBuilder:
def __init__(self,dict):
self.currency = dict['Currency']
self.currencyLong = dict['CurrencyLong']
self.minConfirmation = dict['MinConfirmation']
self.txFee = dict['TxFee']
self.isActive = dict['IsActive']
self.coinType = dict['CoinType']
self.baseAddress = dict['BaseAddress']
self.notice = dict['Notice']
coins_response = requests.get("https://bittrex.com/api/v1.1/public/getcurrencies")
all_coins = json.loads(coins_response.content)
list_of_coin_obs = []
for coin in all_coins["result"]:
list_of_coin_obs.append(CoinBuilder(coin))
此脚本正在获取响应,然后遍历result[]
中的字典并从中构建CoinBuilder
个对象。所有创建的对象也存储在列表list_of_coin_obs[]
。
然后,您可以打印前10个结果,例如:
# Print out the first 10 coins
print("First 10 coins:")
for i in range(1,11):
print(i,") ",list_of_coin_obs[i].currency)
对于此示例,这将输出:
First 10 coins:
1 ) LTC
2 ) DOGE
3 ) VTC
4 ) PPC
5 ) FTC
6 ) RDD
7 ) NXT
8 ) DASH
9 ) POT
10 ) BLK
如果你想通过它的股票代码创建一个查找特定硬币的方法,你可以创建这样的东西:
# method to retrieve a specific coin from 'list_of_coin_obs[]'
# we are passing in a parameter, 'coin_abr' to give to our filter
def get_specific_coin_by_abr(coin_abr):
return next(filter(lambda x: x.currency == coin_abr, list_of_coin_obs))
# call our method, which returns a 'CoinBuilder' type
specific_coin = get_specific_coin_by_abr('BTC')
# print our results to show it worked
print('CurrencyName: ',specific_coin.currency,'CurrencyLong: ',specific_coin.currencyLong)
打印:
CurrencyName: BTC CurrencyLong: Bitcoin
注意:这假设您已经创建了list_of_coin_obs[]
并且与此方法的范围相同。
一个建议,这里的班级名称CoinBuilder
并非完全最有意义。类/对象的更好名称只是Coin
或NamedCurrency
或其他类似的名称。我想我知道你的目的是什么,但这可能更适合你的项目。
祝你好运。