почему элемент не удаляется из значений списка словарей - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть словарь:

new_members = {'member1': ['PCP2'],
 'member10': ['PCP2'],
 'member13': ['PCP5'],
 'member2': ['PCP1', 'PCP2'],
 'member5': ['PCP5'],
 'member6': ['PCP1', 'PCP5'],
 'member7': ['PCP2', 'PCP4'],
 'member8': ['PCP5'],
 'member9': ['PCP1', 'PCP5']}

и 2 набора:

pcps_in_negative = {'PCP4'}
pcps_at_zero = {'PCP6'}

Если элемент из любого набора присутствует в любом из значений списка словаря, удалите его. Поэтому в этом случае «PCP4» следует удалить из списка «member7».

Я пробовал

for k, v in new_members.items():
    for i in v:
        if i in pcps_at_zero or i in pcps_in_negative:
            v.remove(i)

Но new_members предметы остаются без изменений. "member7" должен просто иметь ['PCP2']. Это простой пример. Наборы pcps_in_negative и pcp_at_zero могут иметь больше предметов в другом случае.

Ответы [ 2 ]

2 голосов
/ 05 февраля 2020

вы можете отфильтровать каждый список по вашему требованию:

bad_items = pcps_in_negative |  pcps_at_zero
new_members = {k: [e for e in v if e not in bad_items] for k, v in new_members.items()}
print(new_members)

вывод:

{'member1': ['PCP2'],
 'member10': ['PCP2'],
 'member13': ['PCP5'],
 'member2': ['PCP1', 'PCP2'],
 'member5': ['PCP5'],
 'member6': ['PCP1', 'PCP5'],
 'member7': ['PCP2'],
 'member8': ['PCP5'],
 'member9': ['PCP1', 'PCP5']}
1 голос
/ 05 февраля 2020

Попробуйте это:

import copy
for k, v in new_members.items():
    temp_list = copy.deepcopy(v)
    temp_list = [x for x in temp_list if x not in pcps_at_zero]
    temp_list = [x for x in temp_list if x not in pcps_in_negative]
    new_members[k] = temp_list

Окончательный словарь new_members становится:

{'member1': ['PCP2'],
'member10': ['PCP2'],
'member13': ['PCP5'],
'member2': ['PCP1', 'PCP2'],
'member5': ['PCP5'],
'member6': ['PCP1', 'PCP5'],
'member7': ['PCP2'],
'member8': ['PCP5'],
'member9': ['PCP1', 'PCP5']}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...