我有一个添加到列表中的Python脚本:
column = defaultdict(list)
[...]
for line in out.splitlines():
column[i + 1].append({"row": str(line)})
[...]
f = open(save_dir + 'table_data.json', "w+")
f.write(json.dumps(column))
f.close()
这最终将生成一个JSON文件,其字符串如下:
{ "1":[
{
"row":"Product/Descriptian"
}
],
"2":[
{
"row":"Qty/unit"
},
{
"row":"Text"
}
],
"3":[
{
"row":""
}
]}
如您所见,array["2"]
有两个值。我正在尝试使所有数组的长度相同。因此array["1"]
和array["3"]
最终还将具有两个值。
因此,为了做到这一点,我认为我必须首先找到最长的数组:
longest_array = (max(map(len, column.values())))
这应该返回2
。现在,我想将一个空的{"row":""}
附加到其他数组,以使其长度相同:
final = ([v + ["{'row'}: ''"] * (longest_array - len(v)) for v in column.values()])
哪个输出在JSON字符串下面:
[
[
{
"row":"Product/Descriptian"
},
{
"row":""
}
],
[
{
"row":"Qty/unit"
},
{
"row":"Text"
}
],
[
{
"row":""
},
{
"row":""
}
]
]
这似乎部分起作用。但是,我在新创建的JSON字符串中发现了两个错误:
似乎在第一个数组周围添加了另一个数组。 JSON字符串现在以[ [ {
它将删除“父”数组"1", "2" and "3"
答案 0 :(得分:1)
罪魁祸首在行:
final = ([v + ["{'row'}: ''"] * (longest_array - len(v)) for v in column.values()])
其中:
column.values()
,您将丢失所有键,并且所有与值对应的列表都被“打包”在外部(主)列表中要解决您的问题,请将上面的行变为:
["{'row'}: ''"]
和最终将成为预期的字典:
final = {k: v + [{'row': ''}] * (longest_array - len(v)) for k, v in column.items()}