Поэтому я просмотрел похожие вопросы, и у меня по-прежнему возникает одна и та же проблема, и я не могу понять это. Для этого назначения программирования я создаю упрощенную версию лексического анализа для небольшого подмножества лексики Clite. Я извлекаю токены из входного файла, выводя результаты моего анализа. Я создаю таблицу символов для найденных идентификаторов с использованием словаря. Когда я нахожу те же идентификаторы на разных строках, мне нужно добавить в таблицу символов строку, в которой она была найдена. Например, я нахожу идентификатор «number18» в строке 2 и снова в строке 7. Таким образом, таблица символов должна будет идти от
Проблема возникает, когда я пытаюсь добавить новый номер строки в текущую запись словаря. Я получаю сообщение об ошибке, как я писал в заголовке вопроса. Здесь мой код пока
Вы сначала задали свои значения dict как int :
но потом вы пытаетесь обработать его, как будто это list :
Начните со list содержащим ваш первый int :
и будет работать .append() .
Кроме того, вы можете использовать defaultdict :
а затем добавьте по желанию без необходимости проверять, есть ли ключ:
В другой части выше вы добавляете integer первый раз. Поэтому, когда вы будете использовать append следующий раз, вы получите эту ошибку.
Скорее заверните целое число y в списке [y] , когда вы добавите свое значение в первый раз к своему dict
Ну, вы уже знаете из @Martijn ответ, что использование defaultdict будет лучшим вариантом здесь, так как тогда вам не нужно проверять наличие containment key .
Но, все еще относясь к тому, как вы проверяете ключ в dict:
Когда я запускаю этот код, возникает следующая ошибка: я новичок в программировании, и я знаю, что у меня есть множество бесполезных массивов. Я не знаю, где моя ошибка, так как я объявил j как массив. Я полностью из идей.
4 ответа
2 Решение DhruvPathak [2012-08-09 09:20:00]
j был использован как список aa, так и целое число. Используйте j только для целочисленного имени, назовите список на что-то еще.
Внимательно посмотрите на следующий фрагмент кода:
Обратите внимание, как вы сначала вызываете .append в j (который вы инициализировали списком ранее), а затем используйте его как переменную цикла, вложенную в тот же цикл.
Используйте лучше, значимые имена переменных в вашем коде, чтобы избежать этого класса ошибок. Переименуйте либо переменную цикла, либо переменную списка модулей.
1 Alex [2012-08-09 09:17:00]
Кажется, вы используете переменную ‘j’ как int-counter в цикле, то есть список ‘j’ заменяется на int ‘j’, где вы не можете добавить что-то. Решение. Переименуйте переменные с более сложными именами.
Ваш отступ сломан, но кажется, что эта линия является виновником:
В первый раз j является массивом, но затем вы скрываете его с помощью int j . Трудно обнаружить, поскольку то, что вызывает ошибку, похоже, происходит после него, но поскольку оно в цикле, это не так. Попробуйте переименовать это целое число.
Мой вопрос состоял в том, чтобы сделать программу python, которая заполняет основную диагональ квадратной матрицы номером строки и справа налево по диагонали с ее номером столбца. Остальные элементы матрицы инициализируются суммой индексов элементов.
Поэтому я подошел к этой проблеме со следующим кодом, но когда я пытался ее запустить, он дал следующую ошибку:
Также дайте мне знать, есть ли другой способ сделать 2D-список на python и ввести в него данные от пользователя!
Traceback (most recent call last): File «/home/shinigami/prac5.py», line 21, in a[i].append(p) AttributeError: ‘int’ object has no attribute ‘append’
Ваша переменная a является list int eers. Когда вы пишете a[i].append(. ) вы пытаетесь вызвать метод append для типа int , что вызывает ошибку.
Написание a.append(. ) отлично, потому что a — это list , но как только вы индексируете этот list , вы имеете дело с числами в списке, и у них нет метода append . Например:
Просто убедитесь, что вы используете правильные типы. Логика в вашем коде в настоящее время очень сложна, поэтому вы должны ее упростить.
Также дайте мне знать, это их другой способ сделать 2D-лист
Вы можете использовать списки. Например:
Выше было протестировано с использованием Python3, но при необходимости вы можете приспособить его к Python2.