使数组长度相同,追加json字符串

2024-07-01 07:41:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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字符串中发现了两个错误:

  1. 似乎在第一个数组周围添加了另一个数组。JSON字符串现在以[ [ {

  2. 它删除“父”数组"1", "2" and "3"


Tags: 字符串textinjsonforlineunitcolumn
1条回答
网友
1楼 · 发布于 2024-07-01 07:41:14

罪魁祸首是:

final = ([v + ["{'row'}: ''"] * (longest_array - len(v)) for v in column.values()])

其中:

  • 这是一个列表理解(而不是dict comprehension):通过在column.values()上迭代,您将丢失所有键,并且与值对应的所有列表都已“打包”到外部(主)列表中
  • 不确定您试图通过["{'row'}: ''"]中的双引号()实现什么:这是一个包含一个字符串元素的列表

要解决您的问题,请将上面的行转换为:

final = {k: v + [{'row': ''}] * (longest_array - len(v)) for k, v in column.items()}

final将成为预期的词典:

>>> column
defaultdict(<class 'list'>, {'1': [{'row': 'Product/Descriptian'}], '2': [{'row': 'Qty/unit'}, {'row': 'Text'}], '3': [{'row': ''}]})
>>>
>>> longest_array_len = max((len(v) for v in column.values()))
>>> longest_array_len
2
>>> final = {k: v + [{'row': ''}] * (longest_array_len - len(v)) for k, v in column.items()}
>>>
>>> final
{'1': [{'row': 'Product/Descriptian'}, {'row': ''}], '2': [{'row': 'Qty/unit'}, {'row': 'Text'}], '3': [{'row': ''}, {'row': ''}]}

相关问题 更多 >

    热门问题