你好,我有一个像这样的字典:
{
   "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"
          },
      ]
   }
}我需要从字典列表中删除一些字典“b”
所以我想象我的代码是这样的:
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“key与我的删除标准相等,我也尝试将dict"b”赋给vars,但没有任何影响。
发布于 2020-10-13 15:36:16
发生这种情况是因为当您删除元素时,您不需要增加索引变量。
工作示例:
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发布于 2020-10-13 16:14:29
您的代码遇到逻辑错误。当您使用以下命令删除节点时
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 a4https://stackoverflow.com/questions/64330477
复制相似问题