列表中的字典 Python

Dictionaries within a list Python

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

[{'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']

我想要做的就是能够 select asset 和 return free 数量。

我对字典没有太多经验,但我希望能够做类似的事情:

if asset == 'BTC':
    print(free)

在这种情况下,0.50000000 return 告诉我想要的结果。

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

为了我在 python 中使用 ccxt 加密包装器的价值,使用 fetch_balance(),你会认为会有一个参数允许你 select 您想查询余额的货币是什么,但似乎没有。如果有人知道,那也会很有帮助!

非常感谢

for dictionary in list:
     if dictionary['asset'] == 'BTC':
          print(dictionary['free'])

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

首先注意你写错了字典,需要用"}]关闭"。

这是适合您的情况的代码,它遍历字典:

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

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
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 函数接受一个函数,并将数组的每个成员传递给函数

例如,您可以将所有免费金额相加。

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'

Python 解决方案:

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." )

这对 hande exceptions 很重要:如果任何物品具有 'BTC' 资产价值会怎样?如果某些字典没有 'asset' 或 'free' 会怎样?