python - 从具有同名字段的字典列表中删除键值对
问题描述
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}]
解决方案
通过列表理解尝试:
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}]
推荐阅读
- swift - Swift - UITextField 搜索同时向 UITableView 添加行
- c# - 互操作:如何遍历尾注和脚注中的字段?
- javascript - 如何使用相同的样式添加引导表行?
- java - ZipFileSystem 无法用路径中的斜杠打开 OutputStream
- java - FIRESTORE - 在文档中插入子集合
- kotlin - 覆盖 getValue 和 setValue 以封装一对
- r - 从包含单个引导程序的不等矩阵的列表中创建一个矩阵
- delphi-2010 - WinHTTP - 与服务器的连接异常终止
- javascript - 试图用javascript模拟双缓冲
- swift - Swift 在函数中给我错误并返回一个枚举