我正在尝试从词典列表中的词典中访问某些信息,我真的很努力。我试图检查我在加密货币交易所的余额,当我查询它时,我收到以下词典列表:
[{'asset': 'BTC', 'free': '0.50000000', 'locked': '0.00000000'},
{'asset': 'LTC', 'free': '0.00000000', 'locked': '0.00000000'},
{'asset': 'ETH', 'free': '0.00000000', 'locked': '0.00000000'},
{'asset': 'NEO', 'free': '0.00000000', 'locked': '0.00000000'},
{'asset': 'BNB', 'free': '0.00000000']
我要做的就是能够选择asset
并返回free
的金额。
我对字典没有太多经验,但是我希望能够做类似的事情:
if asset == 'BTC':
print(free)
在这种情况下,可以得到0.50000000
的期望结果。
很明显,我知道这行不通,但是我不确定该怎么办。
对于我在Python中使用ccxt
使用fetch_balance()
加密包装程序的价值,您会认为会有一个参数可以让您选择要检查的货币的平衡,但似乎没有。如果有人知道的话,那也很有帮助!
非常感谢
答案 0 :(得分:2)
首先请注意您错误地编写了字典,您需要使用“}]”将其关闭。
这是一个适用于您的情况的代码,它遍历字典:
dict = [{'asset': 'BTC', 'free': '0.50000000', 'locked': '0.00000000'},
{'asset': 'LTC', 'free': '0.00000000', 'locked': '0.00000000'},
{'asset': 'ETH', 'free': '0.00000000', 'locked': '0.00000000'},
{'asset': 'NEO', 'free': '0.00000000', 'locked': '0.00000000'},
{'asset': 'BNB', 'free': '0.00000000'}]
for element in dict:
if element['asset'] == 'BTC':
print(element['free'])
它打印0.5
答案 1 :(得分:1)
for dictionary in list:
if dictionary['asset'] == 'BTC':
print(dictionary['free'])
那应该遍历列表,并打印每个free
等于'BTC'的asset
值。
答案 2 :(得分:1)
import pandas as pd
list_of_dicts = [{'asset': 'BTC', 'free': '0.50000000', 'locked': '0.00000000'},
{'asset': 'LTC', 'free': '0.00000000', 'locked': '0.00000000'},
{'asset': 'ETH', 'free': '0.00000000', 'locked': '0.00000000'},
{'asset': 'NEO', 'free': '0.00000000', 'locked': '0.00000000'},
{'asset': 'BNB', 'free': '0.00000000'}]
a = pd.DataFrame(list_of_dicts)
res = a.loc[a['asset'] == 'BTC']
res.iloc[0]["free"]
输出:
0.50000000
答案 3 :(得分:1)
dict = [{'asset': 'BTC', 'free': '0.50000000', 'locked': '0.00000000'},
{'asset': 'LTC', 'free': '0.00000000', 'locked': '0.00000000'},
{'asset': 'ETH', 'free': '0.00000000', 'locked': '0.00000000'},
{'asset': 'NEO', 'free': '0.00000000', 'locked': '0.00000000'},
{'asset': 'BNB', 'free': '0.00000000'}]
def printBTC(asset):
if asset.asset = 'BTC':
print(asset.free)
map(printBTC, dict)
起作用的原因是map函数接受一个函数,并将数组的每个成员传递给该函数
答案 4 :(得分:1)
例如,您可以将所有可用金额相加。
In [1]: balance = [{'asset': 'BTC', 'free': '0.50000000', 'locked': '0.00000000'},
...: {'asset': 'LTC', 'free': '0.00000000', 'locked': '0.00000000'},
...: {'asset': 'ETH', 'free': '0.00000000', 'locked': '0.00000000'},
...: {'asset': 'NEO', 'free': '0.00000000', 'locked': '0.00000000'},
...: {'asset': 'BNB', 'free': '0.00000000'}]
In [2]: sum(float(a['free']) for a in balance)
Out[2]: 0.5
或创建一个仅包含资产名称和可用金额的新词典。这样会更容易查询。
In [3]: info = {a['asset']: a['free'] for a in balance}
Out[3]:
{'BTC': '0.50000000',
'LTC': '0.00000000',
'ETH': '0.00000000',
'NEO': '0.00000000',
'BNB': '0.00000000'}
In [4]: info['BTC']
Out[4]: '0.50000000'
答案 5 :(得分:1)
Pythonic解决方案:
做到这一点的Python方法是使用next
内置函数:
next( x['free'] for x in your_list_of_dics if x['asset'] == 'BTC' )
示例:
l=[{'asset': 'BTC', 'free': '0.50000000', 'locked': '0.00000000'},
{'asset': 'LTC', 'free': '0.00000000', 'locked': '0.00000000'},
{'asset': 'ETH', 'free': '0.00000000', 'locked': '0.00000000'},
{'asset': 'NEO', 'free': '0.00000000', 'locked': '0.00000000'},
{'asset': 'BNB', 'free': '0.00000000'}]
result = next( x['free'] for x in l if x['asset'] == 'BTC' )
print(result)
'0.50000000'
处理执行情况:
try:
l=[{'asset': 'BTC', 'free': '0.50000000', 'locked': '0.00000000'},
{'asset': 'LTC', 'free': '0.00000000', 'locked': '0.00000000'},
{'asset': 'ETH', 'free': '0.00000000', 'locked': '0.00000000'},
{'asset': 'NEO', 'free': '0.00000000', 'locked': '0.00000000'},
{'asset': 'BNB', 'free': '0.00000000'}]
result = next( x['free'] for x in l if x['asset'] == 'BTC' )
print(result)
except StopIteration:
print ( "No 'BTC' value in any items." )
except KeyError::
print ( "No 'free' or no 'asset' fields in items." )
对hande exceptions来说很重要:如果任何项目的资产具有“ BTC”价值,会发生什么?如果某些字典没有“资产”或“免费”会怎样?