首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在从json响应中获得两个匹配后中断循环

如何在从json响应中获得两个匹配后中断循环
EN

Stack Overflow用户
提问于 2022-06-02 18:27:53
回答 1查看 64关注 0票数 -1

我只是想知道,在得到1或2个结果之后,是否有可能打破循环,并在相同的条件下设计它的变量。

代码语言:javascript
复制
import json

lookup_dt = "2022-03-09"

r = '{"DBClusterSnapshots": [{"DBClusterSnapshotIdentifier": "snap-1", "DBClusterIdentifier": "aurora-cluster", "SnapshotCreateTime": "2022-03-09", "Engine": "aurora-postgresql", "EngineVersion": "12.7", "SnapshotType": "manual"}, {"DBClusterSnapshotIdentifier": "snap-2", "DBClusterIdentifier": "aurora-cluster", "SnapshotCreateTime": "2022-03-09", "Engine": "aurora-postgresql", "EngineVersion": "12.7", "SnapshotType": "manual"}, {"DBClusterSnapshotIdentifier": "snap-3", "DBClusterIdentifier": "aurora-cluster", "SnapshotCreateTime": "2022-03-09", "Engine": "aurora-postgresql", "EngineVersion": "12.7", "SnapshotType": "manual"}]}'

data = json.loads(r)


snap = [
    d["DBClusterSnapshotIdentifier"]
    for d in response["DBClusterSnapshots"]
    if d['SnapshotCreateTime'].strftime("%Y-%m-%d") == lookup_dt
]

SnapshotId, SnapshotId2,..n = SnapshotId_l[:n]

if SnapshotId :
    print("INFO: Found manual snapshots for requested date: " + str(SnapshotId))
elif: SnapshotId2
    print("INFO: Found manual snapshots for requested date: " + str(SnapshotId2))
else:
    print("ERROR: Snapshot did not find for requested date : " + str(args_lookup_dt))
    exit(1)

假设在if d['SnapshotCreateTime'].strftime("%Y-%m-%d") == lookup_dt条件下,有时可以得到1或更多。日期可能是相同的,但会有一些小数时差。我的用例是:获取一个并分配varaible,如果两个分配给它两个varivales,如果超过两个只是坚持使用onyl 2。

我希望输出结果就像打印出来的一样。

这是可能的还是没有意义的?

EN

回答 1

Stack Overflow用户

发布于 2022-06-02 18:38:25

可以使用简单的列表理解将所有快照名称放入列表中:

代码语言:javascript
复制
import json

lookup_dt = "2022-03-09"
r = '{"DBClusterSnapshots": [{"DBClusterSnapshotIdentifier": "snap-1", "DBClusterIdentifier": "aurora-cluster", "SnapshotCreateTime": "2022-03-09", "Engine": "aurora-postgresql", "EngineVersion": "12.7", "SnapshotType": "manual"}, {"DBClusterSnapshotIdentifier": "snap-2", "DBClusterIdentifier": "aurora-cluster", "SnapshotCreateTime": "2022-03-09", "Engine": "aurora-postgresql", "EngineVersion": "12.7", "SnapshotType": "manual"}, {"DBClusterSnapshotIdentifier": "snap-3", "DBClusterIdentifier": "aurora-cluster", "SnapshotCreateTime": "2022-03-09", "Engine": "aurora-postgresql", "EngineVersion": "12.7", "SnapshotType": "manual"}]}'
data = json.loads(r)

snaps = [
    d["DBClusterSnapshotIdentifier"]
    for d in data["DBClusterSnapshots"]
    if d["SnapshotCreateTime"] == lookup_dt
]
print(snaps)  # ['snap-1', 'snap-2', 'snap-3']

如果您想将前两个变量分配给变量snap1snap2,您可以这样做:

代码语言:javascript
复制
snap1, snap2 = snaps[:2]

但在实践中,您可能会发现只按原样使用snaps列表就更容易了。

(编辑)每个注释,如果希望创建时间为快照ID,则如下所示:

代码语言:javascript
复制
snap_times = {
    d["DBClusterSnapshotIdentifier"]: d["SnapshotCreateTime"]
    for d in data["DBClusterSnapshots"]
    if d["SnapshotCreateTime"] == lookup_dt
}

print(snap_times)
# {'snap-1': '2022-03-09', 'snap-2': '2022-03-09', 'snap-3': '2022-03-09'}

注意,由于我们使用lookup_dt进行了过滤,所有创建时间都将等于lookup_dt。如果不想这样做,只需删除if d["SnapshotCreateTime"] == lookup_dt行即可。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72480813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档