【问题标题】:How to convert a string of a list of tuples to a Python list of tuples [duplicate]如何将元组列表的字符串转换为 Python 元组列表 [重复]
【发布时间】:2018-07-20 19:37:42
【问题描述】:

我有一个保存到字符串中的元组列表(不幸的是)。我正在寻找一种快速有效的方法来将此字符串转换为实际的元组列表。

例子:

mylist_string = '[(40.7822603, -73.9525339), (40.7142, -74.0087), (40.7250027, -73.9413106), (40.703422, -73.9862948), (40.7169963, -74.0149991), (40.7420448, -73.9918131), (40.7287, -73.9799), (40.7757237, -73.9492357), (40.7169904, -73.9578252), (40.726103, -73.9780367), (40.7776792, -73.9585829), (40.6750972, -73.9679734), (40.6867687, -73.9743078), (40.6684762, -73.9755826), (40.7169, -73.9578), (40.6996798, -73.9291393), (40.6680182, -73.9809183), (40.7346, -74.0073), (40.6871087, -73.9741862), (40.7160416, -73.9452393), (40.7178984, -74.0063829)]'

预期的输出是 Python 中的元组列表。

谢谢

【问题讨论】:

  • ast.literal_eval.

标签: python string python-3.x list tuples


【解决方案1】:

这是一种方式:

import ast

ast.literal_eval(mystr)

# [(40.7822603, -73.9525339),
#  (40.7142, -74.0087),
#  (40.7250027, -73.9413106),
#  (40.703422, -73.9862948),
# ...
#  (40.6871087, -73.9741862),
#  (40.7160416, -73.9452393),
#  (40.7178984, -74.0063829)]

【讨论】:

  • 与内置的eval 函数相比,使用ast 有什么好处?
  • 如果输入不是有效的 Python 数据类型,ast.literal_eval 会引发异常。这是一个很好的做法。
  • eval 通常是从不的答案。阅读thisthis 了解更多信息。
  • @mypetlion 的不同之处在于,如果您使用eval,您可能会被解雇。
  • @mypetlion 关于使用 ast 而不是 eval 的问题,请阅读 this
【解决方案2】:
eval(mylist_string)

这将评估您的字符串,就像您在 Python 中键入它一样。

编辑:这是问题的答案,但不是一个好的答案。存在安全风险,它可能不会像您认为的那样做。所以不要使用eval,使用:

import ast

ast.literal_eval(mystr)

查看 [this SO question] 进行详细比较。

【讨论】:

  • 请注意,这可能是一个安全问题。如果你没有清理你的输入,那就是。
  • @Mr.Zeus 谢谢,这是一个有趣的观点。我刚刚发现这篇文章的标题是Eval is really dangerous
  • 例如:exec(os.system("sh")) 将打开一个 shell。因此,如果您为用户和/或可编辑文件(可以由没有管理员/sudo 权限的用户编辑的文件)进行任何输入,请小心。
  • eval 通常是从不的答案。阅读thisthis 了解更多信息。
  • 在某些方面我不明白为什么 eval 语句仍然是 python 的一部分。
猜你喜欢
  • 1970-01-01
  • 2014-07-14
  • 1970-01-01
  • 2011-03-18
  • 2011-05-16
  • 2022-11-21
  • 1970-01-01
  • 2014-10-18
  • 1970-01-01
相关资源
最近更新 更多