[英]remove items from the dictionary having a common element in list
我有一個字典和一個列表值如果元素存在於列表數據中,我想從字典中刪除值,我使用了一些方法,但有些值沒有刪除,沒有得到我做錯的地方
extra_list = ['387', '404', '637', '401', '405', '579', '408', '739', '736', '447', '403', '402', '581']
main_data = [{'stock id': 447, 'name': 'Inners(Essa fai', 'values': 4},
{'stock id': 757, 'name': 'Designery(Blous', 'values': 2},
{'stock id': 652, 'name': 'Saree krishna(P', 'values': 1},
{'stock id': 408, 'name': 'Designery(Blous', 'values': 1},
{'stock id': 684, 'name': 'Saree(Ikkat pri', 'values': 1}]
def listRemover(main_list, remove_list):
for j in main_list:
if str(j['stock id']) in remove_list:
main_list.remove(j)
return main_list
data = listRemover(main_data, extra_list)
如果股票 id 存在於額外列表中,我想刪除字典值
我運行了您的代碼並打印了數據,這給了我:
[{'stock id': 757, 'name': 'Designery(Blous', 'values': 2}, {'stock id': 652, 'name': 'Saree krishna(P', 'values': 1}, {'stock id': 684, 'name': 'Saree(Ikkat pri', 'values': 1}]
所以我想它奏效了。
但是,從您正在迭代的列表中刪除對象通常不是最好的主意。 你可以做
for j in copy.deepcopy(main_list):
代替:
for j in main_list:
只是為了安全。
我會在 memory 中創建一個您想要保留的新列表。 如評論中所述,修改循環列表是一個壞主意
def listRemover(main_list, remove_list):
new_list = []
for j in main_list:
if not (str(j['stock id']) in remove_list):
new_list.append(j)
return new_list
data = listRemover(main_data, extra_list)
Output
[{'stock id': 757, 'name': 'Designery(Blous', 'values': 2}, {'stock id': 652, 'name': 'Saree krishna(P', 'values': 1}, {'stock id': 684, 'name': 'Saree(Ikkat pri', 'values': 1}]
與其修改輸入列表,不如創建一個新列表,如下所示:
extra_list = ['387', '404', '637', '401', '405', '579', '408', '739', '736', '447', '403', '402', '581']
main_data = [{'stock id': 447, 'name': 'Inners(Essa fai', 'values': 4},
{'stock id': 757, 'name': 'Designery(Blous', 'values': 2},
{'stock id': 652, 'name': 'Saree krishna(P', 'values': 1},
{'stock id': 408, 'name': 'Designery(Blous', 'values': 1},
{'stock id': 684, 'name': 'Saree(Ikkat pri', 'values': 1}]
def listRemover(main_list, remove_list):
s = set(map(int, remove_list))
return [j for j in main_list if j.get('stock id') not in s]
print(listRemover(main_data, extra_list))
Output:
[{'stock id': 757, 'name': 'Designery(Blous', 'values': 2}, {'stock id': 652, 'name': 'Saree krishna(P', 'values': 1}, {'stock id': 684, 'name': 'Saree(Ikkat pri', 'values': 1}]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.