首页 > 解决方案 > 如何从字典内的列表内的字典内的这个巨大列表中获取此值...?

问题描述

我正在学习 python 和一些网页抓取技术。我从一个网站提出了一个请求,我想从这个令人困惑的字典中获取一个值:

newDict = {'actions': [{'account_action_seq': 3186, 'action_trace': {'account_ram_deltas': [], 'act': {'account': 'test', 'authorization': [{'actor': 'test', 'permission': 'xfer'}], 'data': {'from': 'm.federation', 'm
emo': 'test', 'quantity': '0.0442', 'to': 'test'}, 'hex_data': 'test', '
name': 'transfer'}, 'action_ordinal': 5, 'block_num': 117988314, 'block_time': 'test', 'closest_unnotified_ancestor_action_ordinal': 2, 'context_free': False, 'creator_action_ordinal': 2, 'elapsed': 2, 'p
roducer_block_id': 'test', 'receipt': {'abi_sequence': 4, 'act_digest': 'test', 'auth_sequence': [['m.f
ederation', 2]], 'code_sequence': 5, 'global_sequence': 4798388072, 'receiver': 'test', 'recv_sequence': 1514}, 'receiver': 'pvwbq.wam', 'trx_id': '3'}, 'block_num': 117988314, 'block_time': '2021-05-08T00:56:14.000', 'global_action_seq': 4798388072, 'irreversible': True}], 'head_block_num': 117989564, 'last_irreversible_block': 117989233}

我想以 0.0442 的“数量”打印值,但我不知道如何得到它。

更新:

act = conteudo.json()
act_list = act['actions']
act_trace = act_list[0]['action_trace']
act_act = act_trace['act']
act_data = act_act['data']
print(act_data['quantity'])

我用这段代码达到了价值,但我不知道这是否是最好的方法。请问各位大神能分析一下吗?

标签: pythonlistdictionary

解决方案


解决此类问题的一种方法是漂亮地打印数据以了解其布局。完成此操作后,通常很容易确定如何访问所需的值。

我通常使用json.dumps()orpprint.pprint()来做这个。在这种情况下,我使用了前者:

import json

newDict = {'actions': [{'account_action_seq': 3186, 'action_trace': {'account_ram_deltas': [], 'act': {'account': 'test', 'authorization': [{'actor': 'test', 'permission': 'xfer'}], 'data': {'from': 'm.federation', 'memo': 'test', 'quantity': '0.0442', 'to': 'test'}, 'hex_data': 'test', 'name': 'transfer'}, 'action_ordinal': 5, 'block_num': 117988314, 'block_time': 'test', 'closest_unnotified_ancestor_action_ordinal': 2, 'context_free': False, 'creator_action_ordinal': 2, 'elapsed': 2, 'producer_block_id': 'test', 'receipt': {'abi_sequence': 4, 'act_digest': 'test', 'auth_sequence': [['m.federation', 2]], 'code_sequence': 5, 'global_sequence': 4798388072, 'receiver': 'test', 'recv_sequence': 1514}, 'receiver': 'pvwbq.wam', 'trx_id': '3'}, 'block_num': 117988314, 'block_time': '2021-05-08T00:56:14.000', 'global_action_seq': 4798388072, 'irreversible': True}], 'head_block_num': 117989564, 'last_irreversible_block': 117989233}
print(json.dumps(newDict, indent=4))

结果:

{
    "actions": [
        {
            "account_action_seq": 3186,
            "action_trace": {
                "account_ram_deltas": [],
                "act": {
                    "account": "test",
                    "authorization": [
                        {
                            "actor": "test",
                            "permission": "xfer"
                        }
                    ],
                    "data": {
                        "from": "m.federation",
                        "memo": "test",
                        "quantity": "0.0442",  # <- BINGO!
                        "to": "test"
                    },
                    "hex_data": "test",
                    "name": "transfer"
                },
                "action_ordinal": 5,
                "block_num": 117988314,
                "block_time": "test",
                "closest_unnotified_ancestor_action_ordinal": 2,
                "context_free": false,
                "creator_action_ordinal": 2,
                "elapsed": 2,
                "producer_block_id": "test",
                "receipt": {
                    "abi_sequence": 4,
                    "act_digest": "test",
                    "auth_sequence": [
                        [
                            "m.federation",
                            2
                        ]
                    ],
                    "code_sequence": 5,
                    "global_sequence": 4798388072,
                    "receiver": "test",
                    "recv_sequence": 1514
                },
                "receiver": "pvwbq.wam",
                "trx_id": "3"
            },
            "block_num": 117988314,
            "block_time": "2021-05-08T00:56:14.000",
            "global_action_seq": 4798388072,
            "irreversible": true
        }
    ],
    "head_block_num": 117989564,
    "last_irreversible_block": 117989233
}

有了这些信息,我想出了这个:

quantity = newDict["actions"][0]["action_trace"]["act"]["data"]["quantity"]
print(quantity)  # -> 0.0442

请注意,这quantity是一个字符串,而不是数值。


推荐阅读