将命名元组的字符串转换为列表。

7 浏览
0 Comments

将命名元组的字符串转换为列表。

如何将命名元组的字符串转换为列表?\n问题是我必须将命名元组的列表存储在SQLite的列中,但SQLite(显然)不支持该格式。我考虑将其转换为字符串。然而,由于我的元组是一个命名元组,我不知道如何再次从字符串转换为列表。\n我的命名元组列表类似于上面的示例,但它有6个参数,而不是上面显示的2个参数。编辑-参数是布尔值、整数和字符串。\n我尝试使用mapping,但遇到了以下错误:\n>>>> string = str(points)\n>>> l = string.strip(\"[]\")\n>>> p = map(Point._make, l.split(\", \"))\nTraceback (most recent call last):\nFile \"\", line 1, in \np = map(Point._make, l.split(\", \"))\nFile \"\", line 17, in _make\nTypeError: Expected 2 arguments, got 9\n我愿意尝试其他更简单的方法来解决这个问题。

0
0 Comments

问题的出现原因:用户想要将命名元组(namedtuple)转换为列表(list)。

解决方法:使用pickle等模块将Python对象存储到文件中,或者使用eval函数与repr函数结合来实现转换。

用户提到使用pickle模块来存储Python对象到文件中,但不确定命名元组是否能与pickle一起使用。如果命名元组的数据源是已知的,则可以使用eval函数与repr函数结合来实现转换。eval函数将字符串解析为Python对象,而repr函数返回对象的字符串表示形式。通过将命名元组转换为字符串,并使用eval函数将其转换回对象,可以实现转换。

代码示例:

>>> repr(points)
'[Point(x=4, y=7), Point(x=8, y=9), Point(x=3, y=5)]'
>>> eval(repr(points))
[Point(x=4, y=7), Point(x=8, y=9), Point(x=3, y=5)]

这个方法很有效。在有时间的时候,用户会研究pickle模块。之前听说过这个模块,但没有关注过。总之,非常感谢。

应该尽量避免使用eval函数,因为它可以执行任意代码,无论它对计算机做什么。pickle.dumps(points)和pickle.loads(pickle_str)是更安全和更优越的解决方案。pickle模块可以将对象序列化为字节流,然后可以将其存储到文件中或从文件中加载。

0
0 Comments

问题的原因:

上述代码中,points是一个由namedtuple组成的列表。问题是如何将这个列表转换为一个普通的列表,其中每个元素是一个字典,字典的键是namedtuple的属性名,值是属性值。

解决方法:

1. 使用json模块将namedtuple列表转换为json格式的字符串,然后再将json字符串转换为普通的列表。

代码如下:

import json
points_str = json.dumps([x._asdict() for x in points])
points2 = [Point(**x) for x in json.loads(points_str)]

2. 使用exec函数将points列表的repr字符串作为代码执行,将结果赋值给points2。

代码如下:

points_str = repr(points)
exec "points2 = %s" % points

这样,问题就得到了解决。通过这两种方法,可以将原始的namedtuple列表转换为普通的列表,方便后续的处理和操作。

0
0 Comments

问题的原因是:用户想要将namedtuple对象转换为列表。

解决方法是使用不同的方法来实现这个目标。一种方法是使用JSON模块。可以使用json.dumps()函数将namedtuple对象转换为字典,并使用json.dumps()函数将字典转换为JSON字符串。另一种方法是使用pickle模块。可以使用pickle.dumps()函数将namedtuple对象序列化为字节字符串,并使用pickle.loads()函数将字节字符串反序列化为namedtuple对象。另外,还可以使用eval函数将namedtuple对象转换为列表,但不建议使用eval函数,因为它具有安全风险。

以下是使用JSON模块的示例代码:

import json
from collections import namedtuple
Point = namedtuple("Point", "x y")
p = Point(3, 4)
json_str = json.dumps(p._asdict())
print(json_str)
json_dict = json.loads(json_str)
p_new = Point(**json_dict)
print(p_new)

以下是使用pickle模块的示例代码:

import pickle
from collections import namedtuple
Point = namedtuple("Point", "x y")
p = Point(3, 4)
pickle_str = pickle.dumps(p)
print(pickle_str)
p_new = pickle.loads(pickle_str)
print(p_new)

总之,根据个人喜好和具体需求,可以选择使用JSON模块、pickle模块或eval函数来将namedtuple对象转换为列表。

0