如何从dict内部的这个巨大列表中获取这个值



我正在学习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'])

我用这个代码达到了这个值,但我不知道这是否是最好的方法。你们能分析一下吗?

解决此类问题的一种方法是漂亮地打印数据以了解其布局。一旦你做到了,通常很容易确定如何访问你想要的值。

我通常使用json.dumps()pprint.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是一个字符串,而不是一个数值。

最新更新