Python:嵌套用于循环,提供不需要的输出


_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 += ','

最新更新