【问题标题】:Convert a string to list with variables将字符串转换为带有变量的列表
【发布时间】:2019-04-11 12:13:51
【问题描述】:

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

stringvalue = '[54.0, country, state]'

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

[54.0, 'country', 'state']

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

[54.0, country, state]

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

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

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.- 没有列出我在看什么

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

【问题讨论】:

  • 你知道国家和州变量的值吗?
  • eval(stringvalue) 将在 countrystate 已定义或 eval(stringvalue, locals=dict(country='US', state='GA')) 已定义的情况下工作
  • 所以 countrystateplaceholders‽ 然后你想要一个简单的子字符串替换,或者你想要为你的迷你表达式语言编写一个迷你解析器,它可以计算像这样的自定义关键字。
  • @deceze 是的,国家和州就像占位符。
  • @martineau 抱歉,您说的完全正确。我应该说:eval(stringvalue, {}, dict(country='US', state='GA'))。见eval。我一直不明白为什么有些函数显然应该没有关键字参数。

标签: python string list replace


【解决方案1】:

从提取字段开始:

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']

【讨论】:

    【解决方案2】:

    试试这个。

    mystr = 'random'
    mylist = []
    for char in mystr:
        mylist += char
    
    print(mylist)
    

    【讨论】:

    • 欢迎来到 Stack Overflow!在 Stack Overflow 上添加一个解释为什么你的解决方案应该工作是一个很好的做法。更多信息请阅读How To Answer
    猜你喜欢
    • 1970-01-01
    • 2013-02-14
    • 2020-12-13
    • 1970-01-01
    • 2018-09-23
    • 2021-03-09
    • 2020-06-05
    • 1970-01-01
    • 2020-07-30
    相关资源
    最近更新 更多