如何从json响应中获得两个匹配后打破for循环



我只是想知道是否有可能在获得1或2个结果后打破循环并将其赋值为具有相同条件的变量。

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,如果超过两个就只坚持使用两个。

我希望输出类似于if的变量true打印它

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

您可以使用一个简单的列表推导将所有快照名称放入一个列表中:

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,您可以这样做:

snap1, snap2 = snaps[:2]

,但在实践中,你可能会发现直接使用snaps列表更容易。

(edit)每个注释,如果你想要一个快照ID到创建时间的字典,那将是:

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行。

最新更新