【问题标题】:Convert list of strings of tuples to list of tuples [duplicate]将元组字符串列表转换为元组列表[重复]
【发布时间】:2019-08-29 14:38:36
【问题描述】:

问题:我必须将元组字符串列表转换为正常的元组列表。原因是我想在图像上绘制 (x,y) 坐标。

我试过map,join,解压它,int(),float(),但似乎没有任何效果。如果我尝试最合乎逻辑的方式,使用 int() 我会收到以下错误:

ValueError: int() 以 10 为底的无效文字:'(50,144)'

这是我的元组字符串列表


vertices = ['(50,144)', '(242,144)', '(242,367)', '(50,367)']
type(vertices) >> list
type(vertices[0]) >> str

【问题讨论】:

  • 这些字符串是从哪里来的?
  • 来自使用 google vision API 的响应
  • 我没有使用过那个 API,只是想可能有一种比手动解析成元组更漂亮的方法来获取这些数据。但是,是的,没试过。

标签: python list tuples


【解决方案1】:

尝试使用ast.literal_eval 安全地解析元组字符串:

from ast import literal_eval

list(map(literal_eval, vertices))
# [(50, 144), (242, 144), (242, 367), (50, 367)]

【讨论】:

    【解决方案2】:

    一种安全的方法是自己解析字符串:

    verts = [tuple(map(int, s[1:-1].split(','))) for s in vertices]
    
    print(verts)
    print(type(verts))
    print(type(verts[0]))
    print(type(verts[0][0]))
    

    输出:

    [(50, 144), (242, 144), (242, 367), (50, 367)]
    <class 'list'>
    <class 'tuple'>
    <class 'int'>
    

    您也可以使用eval,但前提是您对输入的格式(表示整数元组的字符串列表)有信心:

    vertices = ['(50,144)', '(242,144)', '(242,367)', '(50,367)']
    
    verts = [eval(s) for s in vertices]
    
    print(type(verts))
    print(type(verts[0]))
    print(type(verts[0][0]))
    

    输出:

    [(50, 144), (242, 144), (242, 367), (50, 367)]
    <class 'list'>
    <class 'tuple'>
    <class 'int'>
    

    【讨论】:

      猜你喜欢
      • 2018-07-20
      • 1970-01-01
      • 1970-01-01
      • 2012-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多