列表中的字典 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' 会怎样?
我正在尝试从位于词典列表中的词典中访问一些信息,但我真的很费力。我正在尝试检查我在加密货币交易所的余额,当我查询它时,我收到了这个字典列表:
[{'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' 会怎样?