将嵌套的字符串元素转换为具有 python 中一个元素的列表

convert nested string element into list with one element in python

希望这是一个简单的。

我有以下 json:

{
   'listTitle': 'dsadasdsa',
   'chapters': 'testchapter',
   'sublist': [
      {
         'subListCreator': 'jan',
         'item': [
            {
               'itemTitle': 'dasdasd',
               'itemContext': 'None'
            }
         ]
      }
   ]
} 

我可以通过以下方式打印我的 testchapter 值:

  print(data['chapters'])

问题来了,我想做两件事:

  1. 删除完整的章节元素以防章节字符串为空: 'chapters': ''

  2. 将章节转换为包含测试章节值的列表。

情况 1 的预期结果:

{
    'listTitle': 'dsadasdsa',
    'sublist': [
       {
          'subListCreator': 'jan',
          'item': [
             {
                'itemTitle': 'dasdasd',
                'itemContext': 'None'
             }
          ]
       }
    ]
 }

情况 2 的预期结果:

{
    'listTitle': 'dsadasdsa',
    'chapters': [
       'testchapter'
    ],
    'sublist': [
       {
          'subListCreator': 'jan',
          'item': [
             {
                'itemTitle': 'dasdasd',
                'itemContext': 'None'
             }
          ]
       }
    ]
 }

尝试了很多东西,但到目前为止都没有成功。要么它仍然是一个字符串而不是列表,同时看起来像一个列表。或者所有的字符串字符都被转换为单独的列表元素等

希望你能帮助我! :)

如果可以的话,就地修改字典是最简单的方法:

if data['chapters']:
    data['chapters'] = [data['chapters']]
else:
    data.pop('chapters')

通过推导构建新的字典可能如下所示:

{k: [v] if k == 'chapters' else v for k, v in data.items() if v or k != 'chapters'}

听起来您找不到的关键是要将单个值 v 转换为包含该值的列表,您需要使用列表文字表达式 [v].如果你这样做 list(v),你会得到一个列表,其中包含 v 迭代中的每个项目(所以如果 v 是一个字符串,你会得到它的单个字符的列表)。