2

解析部分响应的 URL 参数后,例如?fields=name,id,another(name,id),date,我得到了一个任意嵌套的字符串列表,表示嵌套 JSON 对象的各个键:

['name', 'id', ['another', ['name', 'id']], 'date']

目标是将已解析的键“图”映射到原始的更大的字典上,并仅检索它的部分副本,例如:

input_dict = {
  "name": "foobar",
  "id": "1",
  "another": {
    "name": "spam",
    "id": "42",
    "but_wait": "there is more!"
  },
  "even_more": {
    "nesting": {
      "why": "not?"
    }
  },
  "date": 1584567297
}

应该简单化为:

output_dict = {
  "name": "foobar",
  "id": "1",
  "another": {
    "name": "spam",
    "id": "42"
  },
  "date": 1584567297,
}

到目前为止,我已经浏览了嵌套的 defaultdictsaddictglom,但是它们作为输入的映射与我的列表不兼容(当然可能遗漏了一些东西),我最终得到了垃圾。

如何以编程方式执行此操作,并考虑可能发生的任何嵌套?

4

1 回答 1

2

您可以使用:

def rec(d, f):

    result = {}
    for i in f:
        if isinstance(i, list):
            result[i[0]] = rec(d[i[0]], i[1])
        else:
            result[i] = d[i]

    return result

f = ['name', 'id', ['another', ['name', 'id']], 'date']
rec(input_dict, f)

输出:

{'name': 'foobar',
 'id': '1',
 'another': {'name': 'spam', 'id': '42'},
 'date': 1584567297}

这里的假设是,在嵌套列表中,第一个元素是来自上层的有效键,第二个元素包含来自嵌套 dict 的有效键,这是第一个元素的值

于 2020-03-18T22:52:47.067 回答