簡體   English   中英

從字典中刪除列表中具有共同元素的項目

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM