【问题标题】:python convert string to content of the stringpython将字符串转换为字符串的内容
【发布时间】:2020-11-21 09:42:37
【问题描述】:

我得到了什么:

names = """[{"lname": "HORJLAND", "fname": "Birger"}, {"lname": "LAMERS", "fname": "Edmund"}]"""

我想要什么:

names_list = [{"lname": "HORJLAND", "fname": "Birger"}, {"lname": "LAMERS", "fname": "Edmund"}

如何从名称中获取 names_list?

我从 django 模板中获取 names 变量,我想通过循环在模板标签中解析它并获取 name['fname'] 和 name['lname'] 如下:

for name in names:
   print(name['fname'])

TypeError:字符串索引必须是整数

但由于我得到的是名称而不是 names_list,所以我的循环正在遍历名称的每个字符!

for name in names:
   print(name)

[
{
"
l
n
a
...

非常愚蠢,但我不知道该怎么做......

【问题讨论】:

  • import jsonnames_list = json.loads(names)
  • 这么简单!谢谢!

标签: python django string django-templates


【解决方案1】:

您可以使用ast.literal_eval 来查找字符串的内容。示例代码:

from ast import literal_eval
a = """[1, 2, 3, 4, 5]"""
b = literal_eval(a)
print(type(b))  # <class 'list'>

PS:请勿使用exec(a)eval(a)!他们有安全风险。例如,如果您使用eval('__import__("os")'),则用户可以访问您的计算机。

【讨论】:

    【解决方案2】:

    类似这样的:

    from ast import literal_eval
    
    names = """[{"lname": "HORJLAND", "fname": "Birger"}, {"lname": "LAMERS", "fname": "Edmund"}]"""
    
    for name in literal_eval(names):
      print(name)
    

    【讨论】:

      【解决方案3】:

      使用json 模块,因为如果字符串中的内容是有效的JSON。

      试试,

      import json
      names = """[{"lname": "HORJLAND", "fname": "Birger"}, {"lname": "LAMERS", "fname": "Edmund"}]"""
      names_list = json.loads(names)
      print(names_list)
      # [{'lname': 'HORJLAND', 'fname': 'Birger'}, {'lname': 'LAMERS', 'fname': 'Edmund'}]
      

      【讨论】:

        猜你喜欢
        • 2023-03-11
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多