[英]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 並再次運行算法以進行查詢並重復該過程。
目前尚不清楚您想對您的產品做什么,但由於Services
和Products
是列表,您可以簡單地遍歷它們:
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.