簡體   English   中英

遍歷 JSON 文件中的嵌套字典

[英]Iterate through nested dictionaries from a JSON file

我有來自 json 文件的以下 output

    {
  "Threshold": 0.6,
  "Services": [
    {
      "Name": "Service1",
      "Query": [
        "query1",
        "query2",
        "query3"
      ],
      "Products": [
        {
          "Name": "product1",
          "Query": [
            "query4",
            "query5"
          ],
          "Threshold": 0.75
        },
        {
          "Name": "product2",
          "Query": [
            "query6",
            "query7",
            "query8"
          ],
          "Threshold": 0.75
        },
        {
          "Name": "product3",
          "Query": [
            "query9",
            "query10"
          ],
          "Threshold": 0.75
        },
        {
          "Name": "product4",
          "Query": [
            "query11",
            "query12"
          ],
          "Threshold": 0.75
        },
        {
          "Name": "product5",
          "Query": [
            "query13",
            "query14"
          ],
          "Threshold": 0.75
        }
      ]
    },
    {
      "Name": "Service2",
      "Query": [
        "query1",
        "query2",
        "query3"
      ],
      "Products": [
        {
          "Name": "product1",
          "Query": [
            "query4",
            "query5"
          ],
          "Threshold": 0.75
        },
        {
          "Name": "product2",
          "Query": [
            "query6",
            "query7",
            "query8"
          ],
          "Threshold": 0.75
        },
        {
          "Name": "product3",
          "Query": [
            "query9",
            "query10"
          ],
          "Threshold": 0.75
        },
        {
          "Name": "product4",
          "Query": [
            "query11",
            "query12"
          ],
          "Threshold": 0.75
        },
        {
          "Name": "product5",
          "Query": [
            "query13",
            "query14"
          ],
          "Threshold": 0.75
        }
      ]
    }
  ]
}

該文件的結構如下: 有兩個服務,每個服務有五個相似的產品。 每個服務都有一個查詢列表,其中包含一些描述該服務的關鍵字。

這同樣適用於產品。

每個產品作為一個查詢列表,其中包含描述單個產品的關鍵字。

我想循環進入服務和 select service1。 然后,我想針對文本運行算法中的查詢,以查找文本中是否存在一個或所有查詢。 如果存在查詢或查詢,我想將 go 放入產品並開始迭代 product1 到 product5。 如果沒有,它應該跳過和 go 到 service2

我想對 service2 和相應的產品做同樣的事情。

我只能在運行以下代碼時運行它:

for service in configfile["Services"]:
        if service["Name"] == "Service1":

代碼必須在沒有硬編碼“Service1 或“Service2”名稱的情況下運行。

本質上,我想獲取 service1 和 service2 並訪問查詢。 我將從Sentence transformers運行代碼。

# Query sentences:
queries = ['query1', 'query2', 'query3']



top_k = min(5, len(corpus))
for query in queries:
    query_embedding = embedder.encode(query, convert_to_tensor=True)

   # We use cosine-similarity and torch.topk to find the highest 5 scores
    cos_scores = util.pytorch_cos_sim(query_embedding, corpus_embeddings)[0]
    top_results = torch.topk(cos_scores, k=top_k)

    print("\n\n======================\n\n")
    print("Query:", query)
    print("\nTop 5 most similar sentences in corpus:")

    for score, idx in zip(top_results[0], top_results[1]):
         print(corpus[idx], "(Score: {:.4f})".format(score))

對於每個查詢,我都會從該算法中獲得一些分數。 然后我對查詢進行排序,並獲取具有最大值的查詢。 如果此值高於閾值,我想在 service1 中的 product1 到 product5 的查詢中繼續使用相同的算法。 取最大值,如果該值高於閾值,我會將其作為“正數”添加到字典中。 如果沒有,我會將其添加為“負面”。

如果該值低於閾值,我想跳過迭代到產品和 go 到 Service2 並再次運行算法以進行查詢並重復該過程。

目前尚不清楚您想對您的產品做什么,但由於ServicesProducts是列表,您可以簡單地遍歷它們:

for serv in json_data.get("Services", []):
    if serv.get("Query", None):
        for prod in serv.get("Products", []):
            # do your stuff with prod
            print(serv.get("Name", None), prod.get("Name", None))

Output:

Service1 product1
Service1 product2
Service1 product3
Service1 product4
Service1 product5
Service2 product1
Service2 product2
Service2 product3
Service2 product4
Service2 product5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM