在列表推导式中跳出 For 循环

问题描述 投票:0回答:1

我正在尝试将下面的代码排成一行,看起来列表理解不支持中断。

只是想看看我们是否可以在一行中实现以下代码。

基本上,如果 commonprefix 是一个空列表,那么我想从代码中突破,否则实现代码中的其他逻辑。

resp ={'ResponseMetadata': {'RequestId': 'Z6FCCH9V8NRRBXRQ', 'HostId': 'wNpjpou0pQHSiADh2wmkD6LpcWwlrZz7qN8o/PJFgfwZncArpNEbpuJW9gMYK7VL4ZAScBfxMKo=', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amz-id-2': 'wNpjpou0pQHSiADh2wmkD6LpcWwlrZz7qN8o/PJFgfwZncArpNEbpuJW9gMYK7VL4ZAScBfxMKo=', 'x-amz-request-id': 'Z6FCCH9V8NRRBXRQ', 'date': 'Fri, 04 Aug 2023 10:22:09 GMT', 'x-amz-bucket-region': 'ap-southt-1', 'content-type': 'application/xml', 'transfer-encoding': 'chunked', 'server': 'AmazonS3'}, 'RetryAttempts': 0}, 'IsTruncated': False, 'Marker': '', 'Name': 'bucket-19', 'Prefix': 'ABC/', 'Delimiter': '/', 'MaxKeys': 1000, 'CommonPrefixes': [{'Prefix': 'ABC/Test1/'}, {'Prefix': 'ABC/Test2/'}, {'Prefix': 'ABC/Test3/'}, {'Prefix': 'ABC/Test4/'}], 'EncodingType': 'url'}

if [x for x in resp["CommonPrefixes"]] ==[None]:
    break
test =  [re.search(r"/(\w+)", x["Prefix"]).group() for x in resp.search("CommonPrefixes")]
print(test)
python list-comprehension
1个回答
0
投票

我使用了这样的 if 测试:

使用案例 1 与现有字段:

import re
resp ={'ResponseMetadata': {'RequestId': 'Z6FCCH9V8NRRBXRQ', 'HostId': 'wNpjpou0pQHSiADh2wmkD6LpcWwlrZz7qN8o/PJFgfwZncArpNEbpuJW9gMYK7VL4ZAScBfxMKo=', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amz-id-2': 'wNpjpou0pQHSiADh2wmkD6LpcWwlrZz7qN8o/PJFgfwZncArpNEbpuJW9gMYK7VL4ZAScBfxMKo=', 'x-amz-request-id': 'Z6FCCH9V8NRRBXRQ', 'date': 'Fri, 04 Aug 2023 10:22:09 GMT', 'x-amz-bucket-region': 'ap-southt-1', 'content-type': 'application/xml', 'transfer-encoding': 'chunked', 'server': 'AmazonS3'}, 'RetryAttempts': 0}, 'IsTruncated': False, 'Marker': '', 'Name': 'bucket-19', 'Prefix': 'ABC/', 'Delimiter': '/', 'MaxKeys': 1000, 'CommonPrefixes': [{'Prefix': 'ABC/Test1/'}, {'Prefix': 'ABC/Test2/'}, {'Prefix': 'ABC/Test3/'}, {'Prefix': 'ABC/Test4/'}], 'EncodingType': 'url'}
field="CommonPrefixes"
if field in resp :
    test =  [re.search(r"/(\w+)", x["Prefix"]).group() for x in resp[field]] 
    print(test)

['/Test1', '/Test2', '/Test3', '/Test4']

没有现有字段的用例 2 :

import re
resp ={'ResponseMetadata': {'RequestId': 'Z6FCCH9V8NRRBXRQ', 'HostId': 'wNpjpou0pQHSiADh2wmkD6LpcWwlrZz7qN8o/PJFgfwZncArpNEbpuJW9gMYK7VL4ZAScBfxMKo=', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amz-id-2': 'wNpjpou0pQHSiADh2wmkD6LpcWwlrZz7qN8o/PJFgfwZncArpNEbpuJW9gMYK7VL4ZAScBfxMKo=', 'x-amz-request-id': 'Z6FCCH9V8NRRBXRQ', 'date': 'Fri, 04 Aug 2023 10:22:09 GMT', 'x-amz-bucket-region': 'ap-southt-1', 'content-type': 'application/xml', 'transfer-encoding': 'chunked', 'server': 'AmazonS3'}, 'RetryAttempts': 0}, 'IsTruncated': False, 'Marker': '', 'Name': 'bucket-19', 'Prefix': 'ABC/', 'Delimiter': '/', 'MaxKeys': 1000, 'CommonPrefixes': [{'Prefix': 'ABC/Test1/'}, {'Prefix': 'ABC/Test2/'}, {'Prefix': 'ABC/Test3/'}, {'Prefix': 'ABC/Test4/'}], 'EncodingType': 'url'}
field="CommonPrefixes_other"
if field in resp :
    test =  [re.search(r"/(\w+)", x["Prefix"]).group() for x in resp[field]] 
    print(test)

** {没有打印任何内容} **

© www.soinside.com 2019 - 2024. All rights reserved.