Я пишу код, в котором мне нужно вести подсчет различных слов в виде вложенного слова.
nestedCounts = defaultdict(lambda : defaultdict(int))
for j, tagList in enumerate(sequences_A):
for a, b in zip(sequences_A[j], sequences_B[j]):
nestedCounts[a][b] += 1
Когда я писал nestedCounts=defaultdict(int)
, он показал, что объект TypeError: 'int' не может быть подписан
Когда я изменил его на nestedCounts=defaultdict(Counter)
, он работал нормально.
Когда я изменил его на nestedCounts=defaultdict(lambda : defaultdict(int))
, он также работал нормально.
Затем во втором случае Мне нужен был еще один дикт (не вложенный)
counts = defaultdict(int)
for i in range(len(sequences)):
for j in sequences[i]:
counts[j] += 1
Когда мне написали counts=defaultdict(int)
, он работал нормально.
Когда я изменил его на counts=defaultdict(Counter)
, он показал AttributeError: 'int 'У объекта нет атрибута' items '.
Когда я изменил его на counts=defaultdict(lambda : defaultdict(int))
, он показал TypeError: неподдерживаемые типы операндов для + =:' collection.defaultdict 'и' int '.
Может кто-нибудь объяснить, что происходит, и в этом случае мы должны использовать Counter или Int или Lambda. Что я понял, так это то, что когда мы создаем defaultdict (int), он по умолчанию предоставляет значение по умолчанию 0. Но я не понял, почему я получил ошибку в случае использования Counter.
PS - я ссылался на эту ссылку, но до сих пор не поняли. смешивание defaultdict (dict и int)