【问题标题】:Delete a key-value pair from a list of dictionary having field of same name从具有同名字段的字典列表中删除键值对
【发布时间】:2021-10-17 15:52:01
【问题描述】:
newlist= [{'row': 4, 'col': 4}, {'row': 4, 'col': 5}, {'row': 4, 'col': 6}, {'row': 4, 'col': 7}, {'row': 4, 'col': 8}, {'row': 4, 'col': 9}, {'row': 4, 'col': 10}, {'row': 5, 'col': 4}, {'row': 5, 'col': 5}, {'row': 5, 'col': 6}, {'row': 5, 'col': 7}, {'row': 5, 'col': 8}, {'row': 5, 'col': 9}, {'row': 5, 'col': 10}, {'row': 6, 'col': 4}, {'row': 6, 'col': 5}, {'row': 6, 'col': 6}, {'row': 6, 'col': 7}, {'row': 6, 'col': 8}, {'row': 6, 'col': 9}, {'row': 6, 'col': 10}, {'row': 7, 'col': 4}, {'row': 7, 'col': 5}, {'row': 7, 'col': 6}, {'row': 7, 'col': 7}, {'row': 7, 'col': 8}, {'row': 7, 'col': 9}, {'row': 7, 'col': 10}, {'row': 8, 'col': 11}, {'row': 9, 'col': 11}]

我想删除 第 4 行第 5 列的键值对 如何做到这一点

                        for lines in newlist :
                            if lines['row'] == 4and lines['col'] == 5:
                                print("delete")
                                del added['row']['col']

试了上面的代码,但没有用。它显示错误TypeError: list indices must be integers or slices, not str

要求是以下代码

          row=4
          cols=4
           l=9
            m=11
            added=[]
            while row <= l:
                print("row", row)
                m = 11
                cols= 4
                while cols <= m:
                    print("column",cols)
                    for li in newlist:
                        print("li", li)
                        if li['row'] == row and li['col']!= cols:
                            added.append({
                                'row':row,
                                'col':cols,
                                # 'id':li['id']
                            })
                            print(row, "", cols)
                            print("new")

                        print("lop",added)

                        new_added = [x for x in added if x['row'] != row or x['col'] != cols]


                    cols = cols + 1
                row = row + 1

所以我只需要

newlist= [{'row': 4, 'col': 11}, {'row': 5, 'col': 11}, 
{'row':'6','col:'11'} ,{'row':'7','col:'11'}{'row': 8, 'col': 4}, 
{'row': 8, 'col': 5}, {'row': 8, 'col': 6}, {'row': 8, 'col': 7}, 
{'row': 8, 'col': 8}, {'row': 8, 'col': 9}, {'row': 8, 'col': 10}, 
{'row': 9, 'col': 4}, {'row': 9, 'col': 5}, {'row': 9, 'col': 6}, 
{'row': 9, 'col': 7}, {'row': 9, 'col': 8}, {'row': 9, 'col': 9}, 
{'row': 9, 'col': 10}]

所以我想要上面的输出

newlist 3=out [{'row': 4, 'col': 4}, {'row': 4, 'col': 5}, {'row': 4, 'col': 6}, {'row': 4, 'col': 7}, {'row': 4, 'col': 8}, {'row': 4, 'col': 9}, {'row': 4, 'col': 10}, {'row': 4, 'col': 11}, {'row': 5, 'col': 4}, {'row': 5, 'col': 5}, {'row': 5, 'col': 6}, {'row': 5, 'col': 7}, {'row': 5, 'col': 8}, {'row': 5, 'col': 9}, {'row': 5, 'col': 10}, {'row': 5, 'col': 11}, {'row': 6, 'col': 4}, {'row': 6, 'col': 5}, {'row': 6, 'col': 6}, {'row': 6, 'col': 7}, {'row': 6, 'col': 8}, {'row': 6, 'col': 9}, {'row': 6, 'col': 10}, {'row': 6, 'col': 11}, {'row': 7, 'col': 4}, {'row': 7, 'col': 5}, {'row': 7, 'col': 6}, {'row': 7, 'col': 7}, {'row': 7, 'col': 8}, {'row': 7, 'col': 9}, {'row': 7, 'col': 10}, {'row': 7, 'col': 11}, {'row': 8, 'col': 4}, {'row': 8, 'col': 5}, {'row': 8, 'col': 6}, {'row': 8, 'col': 7}, {'row': 8, 'col': 8}, {'row': 8, 'col': 9}, {'row': 8, 'col': 10}, {'row': 8, 'col': 11}, {'row': 9, 'col': 4}, {'row': 9, 'col': 5}, {'row': 9, 'col': 6}, {'row': 9, 'col': 7}, {'row': 9, 'col': 8}, {'row': 9, 'col': 9}, {'row': 9, 'col': 10}, {'row': 9, 'col': 11}]

【问题讨论】:

    标签: python list dictionary typeerror


    【解决方案1】:

    通过列表理解尝试:

    checker=[{'row':x,'col':y} for x in {x['row'] for x in newlist} for y in range(4,12)]
    #created a list of dict by the given range provided by you
    out=[x for x in checker if x not in newlist]
    #only get those elements of checker list which are not present in newlist
    

    输出输出:

    [{'row': 4, 'col': 11},
     {'row': 5, 'col': 11},
     {'row': 6, 'col': 11},
     {'row': 7, 'col': 11},
     {'row': 8, 'col': 4},
     {'row': 8, 'col': 5},
     {'row': 8, 'col': 6},
     {'row': 8, 'col': 7},
     {'row': 8, 'col': 8},
     {'row': 8, 'col': 9},
     {'row': 8, 'col': 10},
     {'row': 9, 'col': 4},
     {'row': 9, 'col': 5},
     {'row': 9, 'col': 6},
     {'row': 9, 'col': 7},
     {'row': 9, 'col': 8},
     {'row': 9, 'col': 9},
     {'row': 9, 'col': 10}]
    

    【讨论】:

    • 认为这里的逻辑是错误的。 OP 只想删除满足 row=4col=5 条件的项目,但这不包括第一个条目:{'row': 4, 'col': 4}
    • 您需要 x != 4 或 y != 5 因为这相当于 not(x == 4 and y== 5)
    • @Mark 添加了两个条件先生...感谢您的建议 :)
    • @AlbinPaul 添加了这两个条件先生...感谢您的建议 :)
    • @AnuragDabas 请检查上面的代码。在上面的代码中使用了这个要求。但是没有得到正确的输出
    【解决方案2】:

    对列表使用 remove 方法:

    for dic in newList:
        if dic['row'] == 4 and dic['col'] == 5:
            newList.remove(dic)
    

    【讨论】:

    • 这样的输入会失败:[{'row': 4, 'col': 4}, {'row': 4, 'col': 5},{'row': 4, 'col': 5}]
    猜你喜欢
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 2023-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    相关资源
    最近更新 更多