_ax = ["Tim","Tom","Mat"]
_ay = [12,15,11]
_series = "["
for _x in _ax:
_series = _series + '{"name": "%s"' % _x + ', "data": ['
for _y in _ay:
_series = _series + str(_y) + ","
_series = str(_series) + "]}]"
_series = str(_series).replace(",{","]},{").replace(",]","]")
理想情况下,上面的代码应该给我输出为:
series: [{
"name": "Tim",
"data": [12]
}, {
"name": "Tom",
data: [15]
}, {
"name": "Mat",
"data": [11]
}]
但是,我得出的结果如下:
series: [{
"name": "Tim",
"data": [12,15,11]
}, {
"name": "Tom",
data: [12,15,11]
}, {
"name": "Mat",
"data": [12,15,11]
}]
我相信这与 for 循环有关。最好的方法是什么?PS:这只是对实际代码的再现,它更大更复杂。
试试这个:
_ax = ["Tim","Tom","Mat"]
_ay = [12,15,11]
_series = '[ ' + ', '.join([ '{ "name": "%s", "data": [%d] }' % z for z in zip(_ax, _ay) ]) + ' ]'
有关更多详细信息,请参阅zip()
文档。
希望这有帮助。
您的代码正在执行您要求执行的操作:
for _x in _ax:
_series = _series + '{"name": "%s"' % _x + ', "age": ['
for _y in _ay:
_series = _series + str(_y) + ","
第二个是简单地将所有元素倾倒在_y中。它等效于 ",".join(map(str, _y)
,它创建一个字符串,其中元素_y
作为逗号分隔的列表。
如注释中所述,如果要迭代_x
的每个元素和_y
,则应使用如下zip
:
for name, data in zip(_x, _y):
_series += repr({"name": name, "data": [data]})
_series += ','