使用 dict.get() 查找指定名称并打印它们的值(如果存在)

Use dict.get() to look for specified names and print their value if present

我有一个格式如下的 GeoJSON:

{
    "type": "FeatureCollection",
    "features": [{
        "type": "Feature",
        "properties": {
            "uuid": "___",
            "type": "road",
            "length": "10m",
        },
        "geometry": {
            "type": "LineString",
            "coordinates": [
                [__________],
                [__________],
                [__________]
            ]
        }
    }]
}

我写了下面的 python 脚本来尝试读取 GeoJSON 的类型,在这个文件中称为 road.

def process_incoming_file(self, bucket, key, event):
    bulk_data = []

    try:
        obj = s3.get_object(Bucket=bucket, Key=key)
        decoded_content = json.loads(obj['Body'].read().decode('utf-8'))
        print(decoded_content)

        if decoded_content.get('type') == "FeatureCollection":

            for (idx, obj) in enumerate(decoded_content['features']):
                bulk_item = {}

                props = obj.get('properties')

                name = obj['properties'].get('name') or 'NULL'
                print(name)

                keys = [title.lower() for title in props]
                print('keys', keys)

                type = obj['properties'].get('type', 'road')
                print(obj['properties'].get('road'))

我的问题是,在其他 GeoJSON 文件中,type 可能被称为 formofway 以外的名称。

如何编写语句来查找它可能使用的不同名称,例如

type = obj['properties'].get('type', 'road', 'othername', 'something')

如果 GeoJSON 的属性部分中存在这些名称之一,则打印其关联值?例如road.

您可以嵌套调用 get()

prop = obj['properties']
type = prop.get('type', prop.get('formofway', prop.get('othername', prop.get('something'))))

但如果有很多可能性,这将变得非常深入。您可以改用循环。

type_props = ['type', 'formofway', 'othername', 'something']
for prop in type_props:
    if prop in obj['properties']:
        type = obj['properties'][prop]
        break