簡體   English   中英

從字典 Python 內的列表中刪除元素

[英]Remove element from list inside a dict Python

你好,我有一個這樣的字典:

{
   "a":{
      "a1":val,
      "a2":val
   },
   "b":{
      "b1":[
          {
             "measure":{
                 "k":"v",
                 "k1":"v"
             },
             "ts":"2020-10-12T12:12:12"
          },
          {
             "measure":{
                 "k":"v",
                 "k1":"v"
             },
             "ts":"2020-10-12T12:12:12"
          },
      ]
   }
}

我需要從字典列表中刪除一些字典 dict["b"]["b1"]

所以我想象我的代碼是這樣的:

def epc_avionics_treatment(self,dict_data):
    i=0
    for epc1 in dict_data["b"]["b1"]:
        if (epc1["ts"]=="200-00-00T00:00:00Z"):
            del dict_data["b"]["b1"][i]
        i=i+1
    
        
    if (len(dict_data["b"]["b1"])==0):
        del dict_data["b"]["b1"]
    return dict_data

然而,即使“ts”鍵等於我的刪除標准,列表中的元素也不會被刪除,我也嘗試將 dict["b"]["b1"] 分配給 vars,但它沒有影響。

這是因為當您刪除元素時,您不需要增加索引變量。
工作示例:

def epc_avionics_treatment(dict_data):
    i=0
    while i<len(dict_data["b"]["b1"]):
        if (dict_data["b"]["b1"][i]["ts"]=="200-00-00T00:00:00Z"):
            del dict_data["b"]["b1"][i]
            i-=1
        i=i+1
    
        
    if (len(dict_data["b"]["b1"])==0):
        del dict_data["b"]["b1"]
    return dict_data

您的代碼遇到邏輯錯誤。 當您通過以下命令刪除節點時

del dict_data["b"]["b1"][i]

然后增加 i,你會出錯,因為你正在跳過另一個節點。 我將在下面解釋它:

items = [a1,a2,a3,a4,a5]

i=3 // So items[2] : a3

// lets delete items[i]

del items[i] // a3 has been removed.

// now , items[i] is a4 ( i have not increased i yet ), so what happen if i increase the i ? 
i = i + 1 // now items[i] is a5 and i have skipped a4

//if i delete items[i], a5 would be removed and not a4




暫無
暫無

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

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