Python 如何从dict中的这个巨大列表中获取这个值,在dict中的一个列表中。。。?
我正在学习python和一些Web垃圾处理技术。 我从一个网站上提出了一个请求,我想从下面的命令中得到一个值:Python 如何从dict中的这个巨大列表中获取这个值,在dict中的一个列表中。。。?,python,list,dictionary,Python,List,Dictionary,我正在学习python和一些Web垃圾处理技术。 我从一个网站上提出了一个请求,我想从下面的命令中得到一个值: newDict = {'actions': [{'account_action_seq': 3186, 'action_trace': {'account_ram_deltas': [], 'act': {'account': 'test', 'authorization': [{'actor': 'test', 'permission': 'xfer'}], 'data': {'fr
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
是一个字符串,而不是一个数值。您必须诚实地尝试解决方案,然后询问有关实现的特定问题。堆栈溢出不是为了替换现有的教程和文档。您应该知道如何按名称访问dict元素,按位置访问list元素。只需按顺序嵌套这些引用,“剥洋葱皮”,直到找到所需的元素。由于您没有显示任何尝试,因此这不是一个合适的问题。请尝试在json查看器中粘贴您的变量,例如并格式化它。这有助于了解结构。顺便说一句,我在这方面遇到的一个问题是,您在问题中针对newDict
的值在语法上无效,因为它被错误地拆分为多行。谢谢,它成功了!我以前已经找到了答案,但你的答案要干净得多。不客气。我确信还有其他方法可以完成同样的事情——非常好地打印数据——比如有人提到的在线jsonviewer,但我喜欢这种方法,并且已经多次使用过。
quantity = newDict["actions"][0]["action_trace"]["act"]["data"]["quantity"]
print(quantity) # -> 0.0442