Увеличьте объект и добавьте в список Python

#python #json #loops

Вопрос:

У меня простая проблема, но я новичок в Python и немного борюсь с реализацией. Я хочу вывести массив объектов, значения которых увеличиваются на десять, а также конкретное значение, являющееся функцией inflect пакета. Вот пример вывода:

 [
    {
      "id": 1,
      "name": "one-yards",
      "shape": "rect",
      "coords": [166, 686.5, 174, 36.5],
      "opacity": 0.25,
    },
    {
      "id": 2,
      "name": "two-yards",
      "shape": "rect",
      "coords": [178, 686.5, 185, 36.5],
      "opacity": 0.25,
    }
]
 

Обратите внимание , что в coords первой и третьей записи увеличивается на 10 и 12, в то время name как переменная в основном является внедрением id в текст, поэтому я могу использовать inflect пакет. Я хотел бы сгенерировать 10 объектов и добавить их в список, вот мой код:

 import inflect as inf

converter = inf.engine()


def generate_objects(id, start_x, start_y, inc_x, inc_y):
    objects = []
    for yard in range(100):
        id  = 1
        start_x  = inc_x
        start_y  = inc_y
        id_string = converter.number_to_words(id)
        object = "{id: "   id   ", name: " id_string  "-yards"   ", shape: rect, "   
            "coords: "   [start_x, 686.5, start_y, 36.5] ", opacity:0.25}"
        objects.append(object)
        return objects


print(generate_objects(1, 166, 174, 10))
 

Вот ошибка вывода:

 Traceback (most recent call last):
  File "number_text.py", line 18, in <module>
    print(generate_objects(1, 166, 174, 10))
  File "number_text.py", line 12, in generate_objects
    object = "{id: "   str(id)   ", name: " id_string ", shape: rect, "   
TypeError: can only concatenate str (not "list") to str
 

int Например, я попытался завернуть str(id) букву s, но безуспешно.

Комментарии:

1. «Я попытался, например, завернуть ints в str(идентификатор), но безуспешно». Я не понимаю, зачем вам это понадобилось, после прочтения TypeError: can only concatenate str (not "list") to str . Видите, где написано not "list" в скобках? Обратите внимание, как там ничего не сказано not "int" ? Следовательно, проблема не в том, что в объединении есть an int ; проблема в том, что в объединении есть a list . Итак, посмотрите на код, о котором идет речь . Вы видите, где есть список?

2. Однако вам не следует пытаться использовать методы построения строк для создания вывода JSON. Вы должны создавать структурированные данные с использованием list s и dict s, а затем использовать стандартный библиотечный json модуль для получения выходных данных. Вы бы знали об этом, если бы попробовали, например, сначала зайти python json tutorial в поисковую систему.

Ответ №1:

Исправление содержится в коде ошибки. TypeError: can only concatenate str (not "list") to str

Проблема находится на линии, определяющей object

 object = "... "   [some list]   "..."
#to fix it, you could do
object = "... "   "[some list]"   "..."
 

Если вы попробуете сделать это выше, вы заметите, что результат, вероятно, не тот, который вы хотите, потому что то, что вы хотите в виде списка, будет существовать в виде неизменяемой строки.

Следовательно, вместо этого вам следует сделать a dict с соответствующими ключами и значениями, которые вы хотите

Ответ №2:

Спасибо, что указали мне правильное направление. Я воспользовался json библиотекой и успешно решил эту проблему.