Python 使数组长度相同,追加json字符串
我有一个添加到列表中的Python脚本:Python 使数组长度相同,追加json字符串,python,arrays,json,Python,Arrays,Json,我有一个添加到列表中的Python脚本: column=defaultdict(列表) [...] 对于line in out.splitlines(): 列[i+1]。追加({“行”:str(行)}) [...] f=打开(保存目录+‘table_data.json’,‘w+’) f、 写入(json.dumps(列)) f、 关闭() 这将最终生成一个JSON文件,其字符串如下: { "1":[ { "row":"Product/Descriptian"
column=defaultdict(列表)
[...]
对于line in out.splitlines():
列[i+1]。追加({“行”:str(行)})
[...]
f=打开(保存目录+‘table_data.json’,‘w+’)
f、 写入(json.dumps(列))
f、 关闭()
这将最终生成一个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字符串中发现了两个错误:
[
[
{
"row":"Product/Descriptian"
},
{
"row":""
}
],
[
{
"row":"Qty/unit"
},
{
"row":"Text"
}
],
[
{
"row":""
},
{
"row":""
}
]
]
[{
“1”、“2”和“3”
罪魁祸首是:
final=([v+[“{'row'}:”]*(最长的数组-len(v))表示列中的v.values())
其中:
- 这是一个列表理解(而不是dict理解):通过迭代
,您将丢失所有键,并且与值对应的所有列表都已“打包”到外部(主)列表中column.values()
- 不确定您试图通过
中的双引号(“)实现什么:这是一个包含一个字符串的列表[“{row'}:”]
final = {k: v + [{'row': ''}] * (longest_array - len(v)) for k, v in column.items()}
最终版本将成为预期的词典:
>列
defaultdict(,{'1':[{'row':'Product/Descriptian'}],'2':[{'row':'Qty/unit'},{'row':'Text'}],'3':[{'row':''}]
>>>
>>>最长数组长度=最大值((len(v)表示列中的v.values())
>>>最长数组长度
2.
>>>final={k:v+[{'row':'''}]*(最长的数组长度-len(v))表示k,v在column.items()中
>>>
>>>决赛
{'1':[{'row':'Product/Descriptian'},{'row':''''}],'2':[{'row':'Qty/unit'},{'row':'Text'}],'3':[{'row':''},{'row':'''}]
在开始转储之前,您是否尝试过更改字典?这似乎比更正JSON字符串更容易。由于列表是动态创建的,所以我不太确定如何做到这一点。我不知道在转储之前,哪个数组将是最长的,您也可以直接调用:
longest\u array=(max(map(len,column.values())))
然后根据编辑词典在写入文件之前,我正在调用final=…