列表Python中的字典

时间:2019-08-02 20:55:22

标签: python list dictionary ccxt

我正在尝试从词典列表中的词典中访问某些信息,我真的很努力。我试图检查我在加密货币交易所的余额,当我查询它时,我收到以下词典列表:

[{'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()加密包装程序的价值,您会认为会有一个参数可以让您选择要检查的货币的平衡,但似乎没有。如果有人知道的话,那也很有帮助!

非常感谢

6 个答案:

答案 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”价值,会发生什么?如果某些字典没有“资产”或“免费”会怎样?