фильтровать / удалять значения для несуществующих ключей из python defaultdict (list)? - PullRequest
0 голосов
/ 25 октября 2018

Я видел похожие посты об удалении / фильтрации определенных ключей из defaultdict, но все такие опции фактически не удаляют пару пустых значений и ключей, а просто создают новый словарь без них.Делая это, я не смогу получить доступ к элементам чистого defaultdict.

Вот подробности моей проблемы:

Я пытаюсь прочитать несколько молекул из списка, так чтоЯ могу получить доступ к их различным свойствам, перечисленным в их отдельных файлах.Я начинаю с индексации атомов в каждой молекуле;в качестве ключей и затем добавление атомного номера соответствующего атома в качестве значений.Чтобы добиться этого, я использую defaultdict (список) Python, чтобы избежать KeyError.

element_list = [1, 6, 7, 8, 9, 15, 16, 17, 35, 53]
element_indices = defaultdict(list)
counter = 0
XX = [some array]
for atm in m.GetAtoms():
    aid = atm.GetIdx()
    do multiple things.......
    element_indices[atm.GetAtomicNum()].append(counter)
    counter +=  1

    for element in element_list:
        XX = np.array([X[i] for i in element_indices[element]])
        print name, ":", element, (element_indices[element])


printing result : 
11bpo : 1 [1, 4, 6, 8, 10, 12]
11bpo : 6 [0, 3, 5, 7, 9, 11]
11bpo : 7 [2, 13]
11bpo : 8 []
11bpo : 9 []
11bpo : 15 []
11bpo : 16 []
11bpo : 17 []
11bpo : 35 []
11bpo : 53 []

Так как эта молекула не имеет Cl, Br, I или O, значения для нее равны [].Я хочу удалить все такие случаи.

PS: новичок в Python, и это мой первый пост в StackOverflow!Спасибо

1 Ответ

0 голосов
/ 29 октября 2018

Просто нужно сделать:

for element in element_list:
    if element in element_indices:

При этом будут игнорироваться все пары ключ-значение, которых на самом деле не существует в каждой молекуле.

...