Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从dict中的这个巨大列表中获取这个值,在dict中的一个列表中。。。?_Python_List_Dictionary - Fatal编程技术网

Python 如何从dict中的这个巨大列表中获取这个值,在dict中的一个列表中。。。?

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

我正在学习python和一些Web垃圾处理技术。 我从一个网站上提出了一个请求,我想从下面的命令中得到一个值:

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