#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"
? Следовательно, проблема не в том, что в объединении есть anint
; проблема в том, что в объединении есть alist
. Итак, посмотрите на код, о котором идет речь . Вы видите, где есть список?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
библиотекой и успешно решил эту проблему.