我有一个python字典
{
'SearchedFaceBoundingBox': {
'Width': 0.21481677889823914,
'Height': 0.4107130169868469,
'Left': 0.4110604524612427,
'Top': 0.14158998429775238,
},
'SearchedFaceConfidence': 99.99972534179688,
'FaceMatches': [{'Similarity': 99.98224639892578, 'Face': {
'FaceId': '135c758c-d2f0-47e4-9f2c-5c6194063dd6',
'BoundingBox': {
'Width': 0.4479779899120331,
'Height': 0.563962996006012,
'Left': 0.6124510169029236,
'Top': 0.07734870165586472,
},
'ImageId': 'c58935a2-384e-307a-b2d2-060821f035df',
'ExternalImageId': '0000000028037c08_1545579782.jpg',
'Confidence': 99.9999008178711,
}}, {'Similarity': 99.8758773803711, 'Face': {
'FaceId': '89c29bd7-44bf-414c-8911-9375d319a408',
'BoundingBox': {
'Width': 0.3835090100765228,
'Height': 0.7424889802932739,
'Left': 0.28391098976135254,
'Top': -0.17907099425792694,
},
'ImageId': 'be3e2c55-f434-3638-8391-a97e74e94604',
'ExternalImageId': '0000000028037c08_1545573336.jpg',
'Confidence': 99.9999008178711,
}}],
'FaceModelVersion': '4.0',
'ResponseMetadata': {
'RequestId': '571d7684-06d5-11e9-bda1-41e0984ad764',
'HTTPStatusCode': 200,
'HTTPHeaders': {
'content-type': 'application/x-amz-json-1.1',
'date': 'Sun, 23 Dec 2018 17:08:16 GMT',
'x-amzn-requestid': '571d7684-06d5-11e9-bda1-41e0984ad764',
'content-length': '1947',
'connection': 'keep-alive',
},
'RetryAttempts': 0,
},
}
我试图从中仅提取ExternalImageId
。我尝试使用以下代码:
import re
def get_path(dct, path):
for i, p in re.findall(r'(\d+)|(\w+)', path):
dct = dct[p or int(i)]
return dct
value = get_path(f, "FaceMatches[0].Face.ExternalImageId")
虽然可行,但仅获取第一个匹配项,如果我删除了[0]
,则会收到错误消息TypeError: list indices must be integers or slices, not str
。
如何检索所有ExternalImageId
。我正在使用python3。
答案 0 :(得分:4)
这是一个命令,为什么要使用RegEx?你可以做
data = {...}
for match in data['FaceMatches']:
print(match['Face']['ExternalImageId'])
输出
0000000028037c08_1545579782.jpg
0000000028037c08_1545573336.jpg
编辑,以扩展/解释答案:您的字典包含元素,键为'FaceMatches'
。该键的值是一个列表。您需要遍历此列表。其中的每个元素都是一张不同的面孔,同样是字典。您需要密钥'Face'
,它将为您提供另一个dict作为值。您想从后面的'ExternalImageId'
获得密钥dict
的价值。