-1

我正在尝试从位于字典列表中的字典中访问一些信息,我真的很挣扎。我正在尝试检查我在加密货币交易所的余额,当我查询它时,我收到了这个字典列表:

[{'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返回给我。

显然我知道这行不通,但我不知道该怎么做。

对于我ccxt在 python 中使用 Crypto 包装器的价值,使用fetch_balance(),您会认为会有一个参数允许您选择要检查余额的货币,但似乎没有。如果有人知道,那也会非常有帮助!

非常感谢

4

6 回答 6

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

于 2019-08-02T21:01:24.107 回答
1
for dictionary in list:
     if dictionary['asset'] == 'BTC':
          print(dictionary['free'])

这应该遍历列表并打印每个等于“BTC”的free值。asset

于 2019-08-02T21:00:14.123 回答
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
于 2019-08-02T21:02:40.640 回答
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 函数接受一个函数并将数组的每个成员传递给函数

于 2019-08-02T21:05:58.327 回答
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'
于 2019-08-02T21:08:35.770 回答
1

Pythonic 解决方案

pythonic的方法是使用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." )

处理例外情况很重要:如果任何项目在资产上具有“BTC”价值,会发生什么?如果某些 dict 没有 'asset' 或 'free' 会发生什么?

于 2019-08-03T09:33:13.480 回答