首页 > 解决方案 > 将字符串转换为带有变量的列表

问题描述

我正在尝试将字符串转换为列表。

stringvalue = '[54.0, country, state]'

我遇到了很多答案,但所有的字符串都会有这样的引号

[54.0, 'country', 'state']

所以我的想法是我想要一个这样的列表

[54.0, country, state]

基本上,国家和州是变量,将在程序中得到解决。

环顾四周后,我遇到了一个答案,它使用这个删除了字符串周围的引号(')

class MyStr(str):
    """ Special string subclass to override the default representation method
        which puts single quotes around the result.
    """
    def __repr__(self):
        return super(MyStr, self).__repr__().strip("'")

MyStr(stringvalue)

这导致输出看起来像列表(不带引号)

[54.0, country, state]

但类型是__main__.MyStr.- 不列出我在看什么

关于如何解决这个问题的任何想法?

标签: pythonstringlistreplace

解决方案


首先提取字段:

import re
fields = re.findall(r"(?:([^,\s]+)\s*,?\s*)+?", stringvalue[1:-1])
#['54.0', 'country', 'state']

获取对局部变量字典的引用:

country = 'USA'
state = 'MA'
variables = vars()

在字典中查找字段。如果它们在那里,获取它们的值。如果不是,请将它们视为数字:

[variables[x] if x in variables else float(x) for x in fields]
#[54.0, 'USA', 'MA']

推荐阅读