【问题标题】:Deleting part of a string in nested list python在嵌套列表python中删除部分字符串
【发布时间】:2017-06-06 01:39:23
【问题描述】:

我试图在嵌套列表中只保留字符串的特定部分。我的代码如下:

answers = [
    ['person1', ' 2 1": ["answer 1"], "', ' 3 1": ["answer 0"], "', ...]
    ['person2', ' 2 1": ["answer 3"], "', ' 3 1": ["answer 1"], "', ...]]

我想删除部分字符串,以便剩下的唯一部分是:

answers = [
    ['person1', 'answer 1', 'answer 0', ...]
    ['person 2', 'answer 3', 'answer 1', ...]]

【问题讨论】:

  • answers 对象从何而来?
  • @AzatIbrakov 答案来自导入的 json 数据
  • 是的,你做了什么来获得这种格式的列表?也许使用json.loads 之类的东西会在较早的步骤中有所帮助。
  • 请给我们原始来源的例子,以便我们看看是否可以在没有手动字符串解析的情况下完成

标签: python list python-3.x split nested


【解决方案1】:

给定:

answers = [
    ['person1', ' 2 1": ["answer 1"], "', ' 3 1": ["answer 0"], "',],
    ['person2', ' 2 1": ["answer 3"], "', ' 3 1": ["answer 1"], "',]
]

您可以使用正则表达式解析每个字符串以获得所需的模式p

import re


p = re.compile(r'(?!.*\[)(\w+\s*\d)')
new_answers = []
for lst in answers:
    new_answers.append([re.search(p, s).groups(0)[0] for s in lst])
new_answers
# [['person1', 'answer 1', 'answer 0'], ['person2', 'answer 3', 'answer 1']]

这个特殊的pattern 会忽略第一个括号“[”后面的字符,并查找包含零个或多个空格和数字的字母。

【讨论】:

    【解决方案2】:

    此代码有效:

    answers = [
               ['person1', ' 2 1": ["answer 1"], "', ' 3 1": ["answer 0"], "'],
               ['person2', ' 2 1": ["answer 3"], "', ' 3 1": ["answer 1"], "']]
    
    result = []
    for person_ans in answers:
        list = []
        for val in person_ans:
            if "[" in val:
                temp = val.split("[")
                output = temp[1].split("]")[0]
                list.append(output)
            else:
                list.append(val)
        result.append(list)
    print result
    

    输出:

    [['person1', '"answer 1"', '"answer 0"'], ['person2', '"answer 3"', '"answer 1"']]
    

    【讨论】:

      猜你喜欢
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      • 2015-05-14
      • 2018-04-15
      • 2014-02-16
      • 2018-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多