TypeError: нехешируемый тип: 'list' в последней строке кода - PullRequest
0 голосов
/ 02 августа 2020
rm=[[],['COC1=C(C=C(C=C1)CC2=NC=CC3=CC(=C(C=C32)OC)OC)OC.Cl'],     ['C[C@@H]1[C@H]([C@@H]([C@@H]([C@@H](O1)OC\\2CC3C(C(CC(O3)(CC(CC(CC(CC(CC(=O)CC(CC(=O)OC(C(/C=C/C=C/C=C\\C=C/C=C/C=C/C=C2)C)C(C)CCC(CC(=O)C4=CC=C(C=C4)NC)O)O)O)O)O)O)O)O)C(=O)OC)O)N)O']]
smiles_dict=['CCCC1=NN(C2=C1N=C(NC2=O)C3=C(C=CC(=C3)C(=O)CN4CCN(CC4)CC)OCC)C', 'CCCC1=NN(C2=C1N=C(NC2=O)C3=C(C=CC(=C3)S(=O)(=O)N4CCN(CC4)CC)OCC)C']
nsmilesd = {}
nsmilesd= list(set(smiles_dict)-set(rm))

Ошибка отображается для set(rm). Можете ли вы помочь мне понять, почему?

1 Ответ

0 голосов
/ 02 августа 2020

Ошибка относится к объекту ha sh, который не должен изменяться во время выполнения программы python. Попробуйте разложить этот оператор, и вы увидите, что set(rm) не работает. Элементы этого списка также являются списками, и изменяемые вещи не могут быть хешированы при использовании здесь слова python. Это связано с тем, что изменяемые вещи могут быть изменены позже, что делает недействительным этот ha sh.

Наборы используют объект ha sh для поиска значений в наборе. Если ha sh объекта изменится, то похожие и непохожие значения больше не могут быть определены.

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

rm=[[],['COC1=C(C=C(C=C1)CC2=NC=CC3=CC(=C(C=C32)OC)OC)OC.Cl'],     ['C[C@@H]1[C@H]([C@@H]([C@@H]([C@@H](O1)OC\\2CC3C(C(CC(O3)(CC(CC(CC(CC(CC(=O)CC(CC(=O)OC(C(/C=C/C=C/C=C\\C=C/C=C/C=C/C=C2)C)C(C)CCC(CC(=O)C4=CC=C(C=C4)NC)O)O)O)O)O)O)O)O)C(=O)OC)O)N)O']]
smiles_dict=['CCCC1=NN(C2=C1N=C(NC2=O)C3=C(C=CC(=C3)C(=O)CN4CCN(CC4)CC)OCC)C', 'CCCC1=NN(C2=C1N=C(NC2=O)C3=C(C=CC(=C3)S(=O)(=O)N4CCN(CC4)CC)OCC)C']

rm2 = []
for lst in rm:
    rm2.extend(lst)
nsmilesd = {}
nsmilesd= list(set(smiles_dict)-set(rm2))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...