-1

所以,我需要一些帮助来返回找到某个字符串的 ID。我的 JSON 看起来像这样:

{
"id": "id1"
"field1": {
 "subfield1": {
  "subrield2": {
   "subfield3": {
    "subfield4": [
     "string1",
     "string2",
     "string3"
     ]
    }
   }
  }
 }
"id": "id2"
"field1": {
 "subfield1": {
  "subrield2": {
   "subfield3": {
    "subfield4": [
     "string4",
     "string5",
     "string6"
     ]
    }
   }
  }
 }
}

现在,我需要从某个字符串中获取 ID,例如:

对于“string5”,我需要返回“id2”

对于“string2”,我需要返回“id1”

为了找到这些字符串,我使用了 objectpath python 模块,如下所示:json_Tree.execute('$..subfield4'))

在对大量字符串进行分析后,我需要返回符合我标准的字符串。我有我需要的字符串(例如“string3”),但现在我必须返回 ID。

谢谢!!

注意:我没有太多的编码经验,几个月前我才开始用 Python 做一个项目,我已经坚持了一段时间

4

1 回答 1

0

对数据的实际结构做出一些假设:

[
  {
    "id": "id1",
    "subfield1": {
      "subfield2": {
        "subfield3": {
          "subfield4": [
            "string1",
            "string2",
            "string3"
          ]
        }
      }
    }
  }
  // And so on
]

并假设 eachstring1string2仅在一个id 中,那么您可以像这样构造此映射:

data: List[dict] # The json parsed as a list of dicts

string_to_id_mapping = {}

for record in data:
    for string in record["subfield1"]["subfield2"]["subfield3"]["subfield4"]:
        string_to_id_mapping[string] = record["id"]

assert string_to_id_mapping["string3"] == "id1"

如果每个字符串可以出现在多个 id 中,那么以下将捕获所有这些:

from collections import defaultdict

data: List[dict] # The json parsed as a list of dicts

string_to_id_mapping = defaultdict(set)

for record in data:
    for string in record["subfield1"]["subfield2"]["subfield3"]["subfield4"]:
        string_to_id_mapping[string].add(record["id"])

assert string_to_id_mapping["string3"] == {"id1"}
于 2021-01-18T12:22:26.520 回答