如何在Python中将列表中的列表转换为字符串

时间:2019-05-07 16:47:33

标签: python

我有一个JSON输出,我正在使用for循环将每个元素附加到python列表中。我正在使用append函数将元素添加到列表中。循环完成后,我想将列表中的每个项目转换为字符串。问题在于列表中的每个元素都是另一个列表。因此,例如,一个主列表中有2个列表。我已经尝试过使用下面的代码将列表转换为字符串的可能性。

我尝试使用:

  • print '\n'.join(map(str, folder_concat))
  • print '\n'.join(str(x) for x in folder_concat)

我还尝试使用以下方法在附加之前转换附加列表:

''.join(map(str, my_string.append(...elements to append...)

但是,在典型的列表样式中,输出始终是相同的unicode格式,如下所示:

(u'190430', u'TEST', u'Executing', False, False, u'20190430000522', u'20190430000522', u'20190506141820')
(u'190430', u'TEST1', u'Executing', False, False, u'20190430000522', u'20190430000522', u'20190506141820')

要向请求中添加某些在列表中填充的元素,例如estimatedStartTime,这些元素可以用空数据获取,因此我无法使用(str(x) for x in folder_concat)对其进行迭代它会因Iterable Error而失败。

这是我正在使用的脚本:

#!/usr/bin/python

import json
import sys

json_string = sys.stdin.read()
json_data = json.loads(json_string)

returned = json_data['returned']

if returned > 0:
    locations = json_data['statuses']
    sess_count = 0
    folder_count = 0
    folder_concat = []
    folder_str = []

    for i in locations:
        if i['type'] == 'Folder':
            folder_count += 1
            folder_concat.append((
                i.get('orderDate', ''),
                i.get('folderId', ''),
                i.get('status', ''),
                i.get('held', ''),
                i.get('deleted', ''),
                i.get('startTime', ''),
                (''.join(i.get('estimatedStartTime', ''
                 )[0]) if 'estimatedStartTime'
                 in i else ''.join(i.get('estimatedStartTime', ''))),
                (''.join(i.get('estimatedEndTime', ''
                 )[0]) if 'estimatedEndTime'
                 in i else ''.join(i.get('estimatedEndTime', ''))),
                ))
        else:
            pass
       print '\n'.join(str(x) for x in folder_concat)
elif odata['returned'] == 0:
    print 'No results fetched.'
else:
   pass

输入文件为:

{
  "statuses" : [ {
    "orderDate" : "190430",
    "folderId" : "TEST",
    "status" : "Executing",
    "held" : false,
    "deleted" : false,
    "startTime" : "20190501000551",
    "estimatedStartTime" : [ "20190501000551" ],
    "estimatedEndTime" : [ "20190505043236" ],
  } ,{
    "orderDate" : "190430",
    "folderId" : "TEST1",
    "status" : "Executing",
    "held" : false,
    "deleted" : false,
    "startTime" : "20190501000551",
    "estimatedStartTime" : [ "20190501000551" ],
    "estimatedEndTime" : [ "20190505043236" ],
  }],
  "returned" : 2,
  "total" : 2
}

结果应如下所示:

190430, TEST, Executing, False, False, 20190430000522, 20190430000522, 20190506141820
190430, TEST1, Executing, False, False, 20190430000522, 20190430000522, 20190506141820

1 个答案:

答案 0 :(得分:1)

首先,在对元组执行str时,它将精确打印该元组,并带有括号。

我将通过以下方式更改文件夹输出:

for i in locations:
    folder_count += 1
    content = [
        i.get('orderDate', ''),
        i.get('folderId', ''),
        i.get('status', ''),
        i.get('held', ''),
        i.get('deleted', ''),
        i.get('startTime', ''),
        (''.join(i.get('estimatedStartTime', ''
         )[0]) if 'estimatedStartTime'
         in i else ''.join(i.get('estimatedStartTime', ''))),
        (''.join(i.get('estimatedEndTime', ''
         )[0]) if 'estimatedEndTime'
         in i else ''.join(i.get('estimatedEndTime', ''))),
    ]
    folder_concat.append(', '.join(str(item) for item in content))
    print '\n'.join(str(x) for x in folder_concat)

这样,您第一步就是将元素转换为所需的字符串,然后保持相同的流程。让我知道您是否有任何疑问。