首页 > 解决方案 > 从具有同名字段的字典列表中删除键值对

问题描述

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}]

标签: pythonlistdictionarytypeerror

解决方案


通过列表理解尝试:

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}]

推荐阅读