从显示的哈希中获取“目标”键的最简单方法

问题描述

这是有问题的 hashref 的 Dumper 输出:

Derp is:
$VAR1 = {
          'tasks_readiness' => [],'tasks_upgrade' => [
                               {
                                 'type' => 6,'hidden' => 0,'state_name' => '1','allow_html_in_msg' => 1,'aq_id' => '0e43ed66-663e-11eb-a97b-b72c0f665ee4','subtype_name' => '','retry_type' => 1,'safe_to_delete' => 1,'create_time' => 1612370227,'delay_run' => 1612370299,'last_state_change' => 1612370287,'description' => 'Apply Upgrade 7.0.0-1242 to Devices','subtype' => 14,'group_name' => 'DEVICE_UPGRADE','name' => '','type_name' => '6','retries' => 0,'state' => 1,'target' => '_6f5c8c84-6251-11eb-8def-fd627969bf5f_52dcea68-60e9-11eb-830e-f71d7dc3a91f','domain' => 'e276abec-e0f2-11e3-8169-6d9ed49b625f','cost' => 10,'pid' => 0,'message' => '<p><strong>Failed to update 2 devices.<br></strong></p><p><strong>Please reapply policies to your managed devices.</strong></p>','user' => 'admin'
                               }
                             ]
        };

以下 hashref 被另一个函数接收。 task_readiness 可能有元素,也可能没有。我设法以某种复杂的方式抓住了“目标”=> '_6f5c8c84-6251-11eb-8def-fd627969bf5f_52dcea68-60e9-11eb-830e-f71d7dc3a91f',但我想知道什么是最干净、最简单的方法?如果两者都有适用的元素,我还需要能够从 task_readiness 和 task_upgrade 中获取 target -> '' 值:

from bs4 import BeautifulSoup
from bs4.dammit import EncodingDetector
import requests

resp = requests.get("https://finance.yahoo.com/gainers")
http_encoding = resp.encoding if 'charset' in resp.headers.get('content-type','').lower() else None
html_encoding = EncodingDetector.find_declared_encoding(resp.content,is_html=True)
encoding = html_encoding or http_encoding
soup = BeautifulSoup(resp.content,from_encoding=encoding)
myclass = soup.findAll("a",{"class": "Fw(600) C($linkColor)"})
myclass

解决方法

获得所需价值的最简单方法可能是:

$derp->{tasks_upgrade}[0]{target}

如果数组中有其他条目,则增加 0。

注意:感谢 Jim Garrison 指出我之前的愚蠢行为。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...