簡體   English   中英

Python - 從嵌套字典中提取特定項目

[英]Python - Extract specific items from nested dictionary

做一個小項目,我可能會不知所措。 使用 CoinMarketCap API,我試圖了解如何解析他們的結果以提取返回值的特定部分。

舉個例子:

  result = {'status': {'timestamp': '2021-02-22T00:04:51.978Z', 'error_code': 0, 'error_message': None, 'elapsed': 46, 'credit_count': 1, 'notice': None}, 'data': {'1INCH': {'id': 8104, 'name': '1inch', 'symbol': '1INCH', 'slug': '1inch', 'cmc_rank': 83, 'last_updated': '2021-02-22T00:03:09.000Z', 'quote': {'BTC': {'price': 8.793673178965842e-05, 'volume_24h': 4010.9008604493424, 'percent_change_1h': 1.77689058, 'percent_change_24h': -3.76351861, 'percent_change_7d': -19.9798068, 'percent_change_30d': 66.4333541, 'market_cap': 12615.667000751586, 'last_updated': '2021-02-22T00:03:02.000Z'}}}}}

我無法弄清楚如何從這個變量中提取“symbol”、“cmc_rank”和“market_cap”值。 這樣做的正確方法是什么?

謝謝

試試這個解決方案,它應該會給你你正在尋找的東西:

symbol     = result['data']['1INCH']['symbol']
cmc_rank   = result['data']['1INCH']['cmc_rank']
market_cap = result['data']['1INCH']['quote']['BTC']['market_cap']

你試過這個嗎?

print(result["data"]["1INCH"]["symbol"])
print(result["data"]["1INCH"]["cmc_rank"])
print(result["data"]["1INCH"]["quote"]["BTC"]["market_cap"])

“{}”表示 python 字典(字典)——(方括號 [] 是一個列表,括號 () 是一個元組)。 字典也可以嵌套(與列表和元組相同)

在這種情況下,您有一個嵌套字典。 做一些縮進很有幫助...

result = {
'status': {
    'timestamp': '2021-02-22T00:04:51.978Z', 
    'error_code': 0, 
    'error_message': None, 'elapsed': 46, 'credit_count': 1, 'notice': None}, 
'data': {
    '1INCH': {
       'id': 8104, 'name': '1inch', 'symbol': '1INCH', 'slug': '1inch', 'cmc_rank': 83, 'last_updated': '2021-02-22T00:03:09.000Z', 
        'quote': {
            'BTC': {
                'price': 8.793673178965842e-05, 'volume_24h': 4010.9008604493424, 'percent_change_1h': 1.77689058, 'percent_change_24h': -3.76351861, 'percent_change_7d': -19.9798068, 'percent_change_30d': 66.4333541, 'market_cap': 12615.667000751586, 'last_updated': '2021-02-22T00:03:02.000Z'}}}}}

字典中冒號 (:) 左邊的部分是,右邊的部分是值。

所以在你給出的例子中: result['data']['1INCH']['symbol']會給你 symbol 和result['data']['1INCH']['quote']['BTC']['market_cap']會給你市值的價值。

但是,這僅在密鑰不變的情況下才有效。 在這種情況下,看起來結果以符號 ('1INCH') 作為鍵返回。 與貨幣('BTC')相同。 如果您總是期待“1INCH”和“BTC”,那么您可以對其進行硬編碼。 另一方面,如果符號和/或貨幣發生變化,您可能希望 (a) 存儲變量並改用這些變量(例如 symbol='1INCH'....result = x.query(symbol)....result ['data'][symbol].....) 或 (2) 獲取密鑰或 (3) 循環。

要獲取任何字典的鍵列表 - 在本例中,字典 'data' 的鍵: dkeys = list(result['data'].keys()) ... 然后您可以檢查長度len(dkeys)和/或使用數字訪問密鑰(因為它是一個列表) dkeys[0] 所以,像result['data'][dkeys[0]]...

或者您可以循環 - 如果您有多個結果,那就太好了:

#the .items() method will return 2 values - the key and value for each entry
for k, v in result['data'].items():
  #k would be the symbol in this case and v is the dictionary represented by that key
  market_cap = v['quote']['BTC']['market_cap']
  #note if there are multiple symbols here, it would overwrite market_cap...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM