从字典中的数据驱动键获取值

Get values from Data-Driven key in dict

我有一个像下面这样的带有数百个“资产”的字典。我想获取 key="href" 并打印 url 但是因为所有“资产”都在列表中并且“资产”的第一个键正在改变我还没有找到到达那里的方法。感谢您的帮助!

d = {"features": [

    {
        "assets": {
            "swissbuildings3d_2_2018-07_1064-24_2056_5728.dxf.zip": {
                "checksum:multihash":
                    "1220A94A04BD19E190139FAD49E6174DE82987221F7330DDEB7F6943AEAC3D7C4C78",
                "created": "2021-02-10T17:51:31.618859Z",
                "href":
                    "https://data.geo.admin.ch/ch.swisstopo.swissbuildings3d_2/swissbuildings3d_2_2018-07_1064-24/swissbuildings3d_2_2018-07_1064-24_2056_5728.dxf.zip",
                "proj:epsg": 2056,
                "type": "application/x.dxf+zip",
                "updated": "2021-02-10T17:51:31.618877Z"
            }
        }
    },

    {
        "assets": {
            "swissbuildings3d_2_2018-07_1064-42_2056_5728.dxf.zip": {
                "checksum:multihash":
                    "1220EA3AFCCDE8648CB60CDF17AF679458233DE2E6052CBBB91F058CBCA651191F6D",
                "created": "2021-02-10T17:51:33.722985Z",
                "href":
                    "https://data.geo.admin.ch/ch.swisstopo.swissbuildings3d_2/swissbuildings3d_2_2018-07_1064-42/swissbuildings3d_2_2018-07_1064-42_2056_5728.dxf.zip",
                "proj:epsg": 2056,
                "type": "application/x.dxf+zip",
                "updated": "2021-02-10T17:51:33.723005Z"}
        }
    }
]}

如果您的示例中的字典被分配给一个名为 d 的变量,这有效:

result = [(next(iter(x['assets'])), x['assets'][next(iter(x['assets']))]['href']) for x in d['features']]

print(result)

输出:

[('swissbuildings3d_2_2018-07_1064-24_2056_5728.dxf.zip', 'https://data.geo.admin.ch/ch.swisstopo.swissbuildings3d_2/swissbuildings3d_2_2018-07_1064-24/swissbuildings3d_2_2018-07_1064-24_2056_5728.dxf.zip'), ('swissbuildings3d_2_2018-07_1064-42_2056_5728.dxf.zip', 'https://data.geo.admin.ch/ch.swisstopo.swissbuildings3d_2/swissbuildings3d_2_2018-07_1064-42/swissbuildings3d_2_2018-07_1064-42_2056_5728.dxf.zip')]

如果您共享的内容实际上不是字典,而是一个 .json 文件,那么获取它的方法是一样的:

import json

with open('mydata.json') as f:
    d = load.loads(f.read())

试试这个。

output_list = []
for data_dict in d['features']:
    for key, value_dict in data_dict['assets'].items():
        output_list.append(value_dict['href'])

print(output_list)

输出:

['https://data.geo.admin.ch/ch.swisstopo.swissbuildings3d_2/swissbuildings3d_2_2018-07_1064-24/swissbuildings3d_2_2018-07_1064-24_2056_5728.dxf.zip', 'https://data.geo.admin.ch/ch.swisstopo.swissbuildings3d_2/swissbuildings3d_2_2018-07_1064-42/swissbuildings3d_2_2018-07_1064-42_2056_5728.dxf.zip']