首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从dict Python中的列表中移除元素

从dict Python中的列表中移除元素
EN

Stack Overflow用户
提问于 2020-10-13 15:24:22
回答 2查看 49关注 0票数 0

你好,我有一个像这样的字典:

代码语言:javascript
运行
复制
{
   "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”

所以我想象我的代码是这样的:

代码语言:javascript
运行
复制
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,但没有任何影响。

EN

回答 2

Stack Overflow用户

发布于 2020-10-13 15:36:16

发生这种情况是因为当您删除元素时,您不需要增加索引变量。

工作示例:

代码语言:javascript
运行
复制
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
票数 1
EN

Stack Overflow用户

发布于 2020-10-13 16:14:29

您的代码遇到逻辑错误。当您使用以下命令删除节点时

代码语言:javascript
运行
复制
del dict_data["b"]["b1"][i]

然后增加i,你就错了,因为你跳过了另一个节点。我将在下面进行解释:

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64330477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档