【问题标题】:String to a list (Python)字符串到列表(Python)
【发布时间】:2020-03-10 16:26:40
【问题描述】:
cfgFile = { 'pers' : 20, 'source' : '[[3,"COUNTCOL","int"],[4,"COUNTROW","int"], [6,"ROWHEADER","int"],[2,"ROWCOUNT","int"]]'}

数据有时会有所不同:

cfgFile = {'pers': 20,
           'source': '[[3,"COUNTCOL","float",2],[4, "COUNTROW", "int"],[7, "ROWHEADER", "int"],[8, "ROWHEADER", "float",2]]'}
上述字典中的

'source' 是嵌套在 cfgFile 字典中的字符串列表。

我正在尝试访问每个嵌套列表中的第一个索引以创建另一个列表。


sourceString = cfgFile.get('source')
sourceList = list(sourceString[1:-1])

print(sourceList)

【问题讨论】:

  • 你有COUNTCOL等,在任何地方定义?
  • cfgFile 数据从何而来?如果 source 是正确的 JSON,您可以使用 json.loads 将其解析为列表。
  • 它来自日志。

标签: python-3.x list list-comprehension


【解决方案1】:
import re

cfgFile = { 'pers' : 20, 'source' : '[[3, COUNTCOL, int], [4, COUNTROW, int], [6, ROWHEADER, int], [2, ROWCOUNT, int]]' }

l = cfgFile.get("source").split(",")
[re.sub("\[*", "", l[i]) for i in range(len(l)) if i % 3 == 0]
#['3', ' 4', ' 6', ' 2']

【讨论】:

  • 您能否为您的解决方案添加解释!?
  • 虽然这在理论上可以回答这个问题,但最好添加一些关于此代码的作用以及它为何解决 OP 问题的解释。
【解决方案2】:

根据您想对日志中的信息做什么,您可以构建自己的解析器,下面是一个如何解析的示例:

from itertools import repeat

def get_list(v):
    n = (int(e.group()) for e in re.finditer(r'\d', v))
    s = (e.group(1) for e in re.finditer(r'\d, ([A-Z]+),', v))

    return list(list(e) for e in zip(n, s , repeat('int')))

sourceString = cfgFile.get('source')
sourceList = get_list(sourceString)[1:-1]
print(sourceList)

输出:

[[4, 'COUNTROW', 'int'], [6, 'ROWHEADER', 'int']]

由于您在问题中更改了cfgFile,因此您可以使用ast.literal_eval

from ast import literal_eval


literal_eval(sourceString)

sourceString = cfgFile.get('source')
sourceList = literal_eval(sourceString)[1:-1]

print(sourceList)

输出:

[[4, 'COUNTROW', 'int'], [7, 'ROWHEADER', 'int']]

【讨论】:

  • cfgFile = {'pers': 20, 'source': '[[3,"COUNTCOL","float",2],[4, "COUNTROW", "int"],[7, "ROWHEADER", "int"],[8, "ROWHEADER", "float",2]]'}
  • @Anyta 检查我的回答,如果我的回答解决了您的问题,您可以投票或接受
猜你喜欢
  • 2012-08-07
  • 2017-04-24
  • 1970-01-01
  • 2012-08-11
  • 1970-01-01
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
  • 2015-02-10
相关资源
最近更新 更多